package com.yonge.cooleshow.student.controller.open;

import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.dayaedu.cbs.common.enums.school.EMusicSheetType;
import com.dayaedu.cbs.openfeign.wrapper.music.CbsMusicSheetWrapper;
import com.microsvc.toolkit.common.response.template.R;
import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
import com.yonge.cooleshow.auth.api.entity.SysUser;
import com.yonge.cooleshow.biz.dal.entity.MusicSheet;
import com.yonge.cooleshow.biz.dal.entity.Student;
import com.yonge.cooleshow.biz.dal.entity.UserMusic;
import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
import com.yonge.cooleshow.biz.dal.enums.SourceTypeEnum;
import com.yonge.cooleshow.biz.dal.service.*;
import com.yonge.cooleshow.biz.dal.vo.MusicSheetDetailVo;
import com.yonge.cooleshow.biz.dal.vo.MusicSheetVo;
import com.yonge.cooleshow.biz.dal.wrapper.InstrumentWrapper;
import com.yonge.cooleshow.biz.dal.wrapper.MusicSheetWrapper;
import com.yonge.cooleshow.common.controller.BaseController;
import com.yonge.cooleshow.common.entity.HttpResponseResult;
import com.yonge.cooleshow.common.enums.YesOrNoEnum;
import com.yonge.toolset.base.exception.BizException;
import com.yonge.toolset.base.page.PageInfo;
import com.yonge.toolset.mybatis.support.PageUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;

/**
 * 曲谱表 web 控制层
 * @author yzp
 * @date 2022-03-26 00:21:46
 * @version v1.0
 **/
@RestController
@RequestMapping("${app-config.url.student:}/open/musicSheet")
@Api(tags = "曲谱表 API接口")
public class OpenMusicSheetCbsController extends BaseController {
    @Resource
    private SysUserFeignService sysUserFeignService;

	@Resource
	private MusicSheetService musicSheetService;


    @Autowired
    private InstrumentService instrumentService;

    @Autowired
    private UserMusicService userMusicService;

    /**
     * 查询单条
     *
     * @param id 详情ID
     * @return R<MusicSheetVo.MusicSheet>
     */
    @ApiOperation(value = "查询内容平台数据")
    @ApiImplicitParams({
        @ApiImplicitParam(name = "id", value = "id", dataType = "long")
    })
    @GetMapping("/cbsDetail/{id}")
    public R<MusicSheetVo.MusicSheetDetail> cbsDetail(@PathVariable("id") Long id,
                                                      @RequestParam(required = false) String tenantAlbumId,
                                                      @RequestParam(required = false) Long userMusicId) {

        // 曲目信息
        MusicSheet musicSheet = musicSheetService.getDao().get(id);
        if (Objects.isNull(musicSheet)) {
            throw new BizException("曲目信息不存在");
        }
        if (musicSheet.getCbsMusicSheetId() ==null) {
            throw new BizException("曲目信息异常");
        }
        CbsMusicSheetWrapper.MusicSheet cbsMusicSheet = musicSheetService.cbsDetail(musicSheet.getCbsMusicSheetId());
        cbsMusicSheet.setBizId(id);

        MusicSheetVo.MusicSheetDetail musicSheetDetail = JSON.parseObject(JSON.toJSONString(cbsMusicSheet), MusicSheetVo.MusicSheetDetail.class);
        MusicSheetDetailVo detail;
        if (userMusicId != null) {
            UserMusic userMusic = userMusicService.detail(userMusicId);
            if (userMusic == null) {
                throw new BizException("参数错误");
            } else {
                SysUser sysUser = sysUserFeignService.queryUserById(userMusic.getUserId());
                detail = musicSheetService.detail(id.toString(), sysUser, ClientEnum.STUDENT, tenantAlbumId);
            }
        } else {

            detail = musicSheetService.detail(id.toString(), null, ClientEnum.STUDENT, tenantAlbumId);
        }
        if (detail != null) {
            // 设置曲目付费类型
            musicSheetDetail.setPaymentType(detail.getPaymentType());
            // 设置业务端曲目分类
//            musicSheetDetail.setBizMusicCategoryId(detail.getCategoriesId() == null ? null : detail.getCategoriesId().longValue());
            musicSheetDetail.setScoreType(detail.getScoreType());
            musicSheetDetail.setIsConvertibleScore(detail.getNotation() ==YesOrNoEnum.YES);
            musicSheetDetail.setPlay(detail.getPlay());
            musicSheetDetail.setBuyed(detail.getBuyed());
            musicSheetDetail.setMusicPrice(detail.getMusicPrice());
        }

        // 如果是合奏 并且乐器ID = 2268
        musicSheetDetail.setSpecialPercussionFlag(false);
        if ("2268".equals(musicSheetDetail.getMusicalInstrumentIds()) && musicSheetDetail.getMusicSheetType() == EMusicSheetType.CONCERT) {
            musicSheetDetail.setSpecialPercussionFlag(true);
        }

        // 设置乐器信息
        if (StringUtils.isNotBlank(musicSheetDetail.getMusicalInstrumentIds())) {
            List<Long> instrumentIds = Arrays.stream(musicSheetDetail.getMusicalInstrumentIds().split(","))
                .map(Long::parseLong).collect(Collectors.toList());

            if (CollectionUtils.isNotEmpty(instrumentIds) && CollectionUtils.isNotEmpty(musicSheetDetail.getMusicalInstruments())) {
                Map<Long, InstrumentWrapper.Instrument> instrumentMap = instrumentService.getMapByIds(instrumentIds);
                for (CbsMusicSheetWrapper.MusicalInstrument musicalInstrument : musicSheetDetail.getMusicalInstruments()) {
                    InstrumentWrapper.Instrument instrument = instrumentMap.get(musicalInstrument.getId().longValue());
                    if (instrument != null) {
                        musicalInstrument.setOrientation(instrument.getOrientation());
                    }

                }
            }
        }
        return R.from(musicSheetDetail);
    }

}
