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

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.yonge.cooleshow.biz.dal.dto.search.MusicAlbumDetailSearch;
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.extension.service.IService;
import com.yonge.cooleshow.biz.dal.entity.MusicSheet;
import com.yonge.cooleshow.biz.dal.enums.YesOrNoEnum;
import com.yonge.cooleshow.biz.dal.vo.AlbumDetailVo;
import com.yonge.cooleshow.biz.dal.vo.MusicAlbumVo;
import com.yonge.cooleshow.biz.dal.vo.MusicSheetVo;

/**
 * MusicAlbumService服务类
 * @author yzp
 * @date 2022-03-25 23:46:28
 * @version v1.0
 **/
public interface MusicAlbumService extends IService<MusicAlbum> {

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

    /**
     * 启用/停用 专辑
     *
     * @param id 专辑id
     * @return
     */
    boolean state(Long id);

    /**
     * 专辑详情信息
     *
     * @param page 分页信息
     * @param query 查询条件
     * @return AlbumDetailVo
     */
    AlbumDetailVo detail(IPage<MusicSheetVo> page, MusicAlbumDetailSearch query);

    /**
     * 删除专辑详情关联曲目
     *
     * @param albumId 专辑id
     * @param musicSheetIds 曲目id
     * @return boolean
     */
    boolean delMusicSheet(Long albumId, String musicSheetIds);

    /**
     * 添加专辑详情关联曲目
     *
     * @param albumId 专辑id
     * @param musicSheetIds 曲目id
     * @param userId 操作用户id
     * @return boolean
     */
    boolean addMusicSheet(Long albumId, String musicSheetIds, Long userId);

    /**
     * 创建专辑
     *
     * @param musicAlbum 专辑对象
     */
    boolean createMusicAlbum(MusicAlbum musicAlbum);

    /**
     * 修改专辑
     *
     * @param musicAlbum 专辑对象
     */
    boolean updateMusicAlbum(MusicAlbum musicAlbum);

    /**
     * 判断是否已收藏
     *
     * @param studentId 学生id
     * @param albumId 专辑id
     * @return YesOrNoEnum
     */
    YesOrNoEnum checkFavorite(Long studentId, Long albumId);

    /**
     * 设置学生收藏/取消收藏 专辑
     *
     * @param studentId 学生id
     * @param albumId 专辑id
     * @return boolean
     */
    Boolean setFavorite(Long studentId, Long albumId);

    /**
     * 收藏专辑列表
     *
     * @param page 分页
     * @param search 查询条件
     * @return list
     */
    IPage<MusicAlbumVo> favoriteAlbum(IPage<MusicAlbumVo> page, StudentMusicAlbumSearch search);

    /**
     * 删除专辑
     *
     * @param id
     * @return
     */
    boolean del(Long id);
}