package com.test.musichouduan.service;

import com.test.musichouduan.dto.MusicTypeDTO;
import com.test.musichouduan.dto.PageResult;
import com.test.musichouduan.dto.PlaylistTypeDTO;
import com.test.musichouduan.dto.SingerTypeDTO;

import java.util.List;

/**
 * 类型服务接口
 */
public interface TypeService {

    /**
     * 获取音乐类型列表
     *
     * @return 音乐类型列表
     */
    List<MusicTypeDTO> getMusicTypeList();

    /**
     * 分页获取音乐类型列表
     *
     * @param page 页码
     * @param size 每页大小
     * @param keyword 关键字
     * @return 分页结果
     */
    PageResult<MusicTypeDTO> getMusicTypePage(Integer page, Integer size, String keyword);

    /**
     * 添加音乐类型
     *
     * @param musicTypeDTO 音乐类型DTO
     * @return 音乐类型DTO
     */
    MusicTypeDTO addMusicType(MusicTypeDTO musicTypeDTO);

    /**
     * 更新音乐类型
     *
     * @param id 音乐类型ID
     * @param musicTypeDTO 音乐类型DTO
     * @return 音乐类型DTO
     */
    MusicTypeDTO updateMusicType(Long id, MusicTypeDTO musicTypeDTO);

    /**
     * 删除音乐类型
     *
     * @param id 音乐类型ID
     * @return 是否成功
     */
    boolean deleteMusicType(Long id);

    /**
     * 获取歌手类型列表
     *
     * @return 歌手类型列表
     */
    List<SingerTypeDTO> getSingerTypeList();

    /**
     * 分页获取歌手类型列表
     *
     * @param page 页码
     * @param size 每页大小
     * @param keyword 关键字
     * @return 分页结果
     */
    PageResult<SingerTypeDTO> getSingerTypePage(Integer page, Integer size, String keyword);

    /**
     * 添加歌手类型
     *
     * @param singerTypeDTO 歌手类型DTO
     * @return 歌手类型DTO
     */
    SingerTypeDTO addSingerType(SingerTypeDTO singerTypeDTO);

    /**
     * 更新歌手类型
     *
     * @param id 歌手类型ID
     * @param singerTypeDTO 歌手类型DTO
     * @return 歌手类型DTO
     */
    SingerTypeDTO updateSingerType(Long id, SingerTypeDTO singerTypeDTO);

    /**
     * 删除歌手类型
     *
     * @param id 歌手类型ID
     * @return 是否成功
     */
    boolean deleteSingerType(Long id);

    /**
     * 获取歌单类型列表
     *
     * @return 歌单类型列表
     */
    List<PlaylistTypeDTO> getPlaylistTypeList();

    /**
     * 分页获取歌单类型列表
     *
     * @param page 页码
     * @param size 每页大小
     * @param keyword 关键字
     * @return 分页结果
     */
    PageResult<PlaylistTypeDTO> getPlaylistTypePage(Integer page, Integer size, String keyword);

    /**
     * 添加歌单类型
     *
     * @param playlistTypeDTO 歌单类型DTO
     * @return 歌单类型DTO
     */
    PlaylistTypeDTO addPlaylistType(PlaylistTypeDTO playlistTypeDTO);

    /**
     * 更新歌单类型
     *
     * @param id 歌单类型ID
     * @param playlistTypeDTO 歌单类型DTO
     * @return 歌单类型DTO
     */
    PlaylistTypeDTO updatePlaylistType(Long id, PlaylistTypeDTO playlistTypeDTO);

    /**
     * 删除歌单类型
     *
     * @param id 歌单类型ID
     * @return 是否成功
     */
    boolean deletePlaylistType(Long id);
}
