package com.test.musichouduan.service;

import com.test.musichouduan.dto.CommentDTO;
import com.test.musichouduan.dto.PageResult;

/**
 * 评论服务接口
 */
public interface CommentService {

    /**
     * 根据ID获取评论
     *
     * @param id 评论ID
     * @return 评论DTO
     */
    CommentDTO getCommentById(Long id);

    /**
     * 分页获取评论列表
     *
     * @param targetId 目标ID
     * @param targetType 目标类型
     * @param page 页码
     * @param size 每页大小
     * @return 分页结果
     */
    PageResult<CommentDTO> getCommentList(Long targetId, Integer targetType, Integer page, Integer size);

    /**
     * 添加评论
     *
     * @param commentDTO 评论DTO
     * @return 评论DTO
     */
    CommentDTO addComment(CommentDTO commentDTO);

    /**
     * 删除评论
     *
     * @param id 评论ID
     * @return 是否成功
     */
    boolean deleteComment(Long id);

    /**
     * 获取用户的评论列表
     *
     * @param userId 用户ID
     * @param page 页码
     * @param size 每页大小
     * @return 分页结果
     */
    PageResult<CommentDTO> getUserCommentList(Long userId, Integer page, Integer size);

    /**
     * 管理员获取所有评论列表
     *
     * @param page 页码
     * @param size 每页大小
     * @param keyword 关键字
     * @param targetType 目标类型
     * @param status 状态
     * @return 分页结果
     */
    PageResult<CommentDTO> getAdminCommentList(Integer page, Integer size, String keyword, Integer targetType, Integer status);

    /**
     * 更新评论状态
     *
     * @param id 评论ID
     * @param status 状态
     * @return 是否成功
     */
    boolean updateCommentStatus(Long id, Integer status);

    /**
     * 管理员删除评论
     *
     * @param id 评论ID
     * @return 是否成功
     */
    boolean adminDeleteComment(Long id);
}
