package com.yonge.cooleshow.biz.dal.dao;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.yonge.cooleshow.biz.dal.dto.search.MusicAlbumSearch;
import com.yonge.cooleshow.biz.dal.dto.search.StudentMusicAlbumSearch;
import com.yonge.cooleshow.biz.dal.entity.MusicAlbum;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yonge.cooleshow.biz.dal.enums.ChargeTypeEnum;
import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
import com.yonge.cooleshow.biz.dal.vo.MusicAlbumVo;
import com.yonge.cooleshow.biz.dal.wrapper.StatGroupWrapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * MusicAlbumDao数据库访问类
 *
 * @author yzp
 * @version v1.0
 * @date 2022-03-25 23:46:28
 **/
public interface MusicAlbumDao extends BaseMapper<MusicAlbum> {

    /**
     * 专辑查询
     *
     * @param page  分页信息
     * @param query 查询条件
     * @return page
     */
    List<MusicAlbumVo> selectPage(@Param("page") IPage<MusicAlbumVo> page, @Param("query") MusicAlbumSearch query);

    /**
     * 收藏专辑列表
     *
     * @param page   分页
     * @param search 查询条件
     * @return
     */
    List<MusicAlbumVo> selectFavoritePage(@Param("page") IPage<MusicAlbumVo> page, @Param("query") StudentMusicAlbumSearch search, @Param("clientType") ClientEnum clientType);

    /**
     * 查询收藏专辑的收藏数和曲谱数
     *
     * @param records 专辑id集合
     * @return
     */
    List<MusicAlbumVo> selectFavoriteNumAndMusicNum(@Param("records") List<MusicAlbumVo> records);


    /**
     * 根据id获取专辑信息
     *
     * @param musicAlbumId 专辑id
     * @return
     */
    MusicAlbumVo selectMusicAlbumById(@Param("musicAlbumId") Long musicAlbumId);

    /**
     * 学生专辑查询
     *
     * @param page  分页信息
     * @param query 查询条件
     * @param clientType ClientEnum
     * @return page
     */
    List<MusicAlbumVo> selectStudentPage(@Param("page") IPage<MusicAlbumVo> page, @Param("query") MusicAlbumSearch query, @Param("clientType") ClientEnum clientType);

    /**
     * 专辑单曲付费类型统计
     * @param albumId 专辑ID
     * @param paymentType 付费方式
     * @return List<StatGroupWrapper>
     */
    List<StatGroupWrapper> selectAlbumMusicSheetStatInfo(@Param("albumId") Long albumId, @Param("paymentType") ChargeTypeEnum paymentType);
}