package shop.alien.store.service;

import com.baomidou.mybatisplus.extension.service.IService;
import shop.alien.entity.result.R;
import shop.alien.entity.store.StoreStaffComment;
import shop.alien.entity.store.dto.StoreStaffCommentRequestDto;
import shop.alien.entity.store.dto.StoreStaffReplyDto;
import shop.alien.entity.store.vo.StoreStaffCommentVo;

import java.util.List;

/**
 * 员工评论 服务类
 *
 * @author system
 * @since 2025-01-XX
 */
public interface StoreStaffCommentService extends IService<StoreStaffComment> {

    /**
     * 创建评论（其他用户对评价的评论）
     *
     * @param comment 评论实体
     * @return R<StoreStaffComment>
     */
    R<StoreStaffComment> createComment(StoreStaffComment comment);

    /**
     * 根据评价ID查询评论列表
     *
     * @param reviewId 评价ID
     * @param currentUserId 当前用户ID（用于判断是否已点赞，可为null）
     * @return R<List<StoreStaffCommentVo>>
     */
    R<List<StoreStaffCommentVo>> getCommentListByReviewId(Integer reviewId, Integer currentUserId);

    /**
     * 点赞评论
     *
     * @param requestDto 请求DTO
     * @return R<Boolean>
     */
    R<Boolean> likeComment(StoreStaffCommentRequestDto requestDto);

    /**
     * 取消点赞评论
     *
     * @param requestDto 请求DTO
     * @return R<Boolean>
     */
    R<Boolean> cancelLikeComment(StoreStaffCommentRequestDto requestDto);

    /**
     * 创建回复（用户对评论的回复）
     *
     * @param replyDto 回复DTO
     * @return R<StoreStaffComment>
     */
    R<StoreStaffComment> createReply(StoreStaffReplyDto replyDto);

    /**
     * 根据首评ID查询回复列表
     *
     * @param headId 首评ID
     * @param currentUserId 当前用户ID（用于判断是否已点赞，可为null）
     * @return R<List<StoreStaffCommentVo>>
     */
    R<List<StoreStaffCommentVo>> getReplyListByHeadId(Integer headId, Integer currentUserId);

    /**
     * 删除回复
     *
     * @param replyId 回复ID
     * @param userId 用户ID
     * @return R<Boolean>
     */
    R<Boolean> deleteReply(Integer replyId, Integer userId);

    /**
     * 删除评论（根据ID，物理删除）
     * userId有值时只能删除自己发布的评论，userId为空时允许删除任何评论（管理员删除）
     *
     * @param comment 评论对象（包含id和userId，userId可选）
     * @return R<Boolean>
     */
    R<Boolean> deleteReviewComment(StoreStaffComment comment);
}

