package shop.alien.lawyer.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import shop.alien.entity.result.R;
import shop.alien.entity.store.CommentAppeal;
import shop.alien.entity.store.vo.CommentAppealVo;

import java.util.List;

/**
 * 评论申诉表 服务类
 *
 * @author system
 * @since 2025-01-XX
 */
public interface CommentAppealService extends IService<CommentAppeal> {

    /**
     * 提交申诉
     *
     * @param commentAppeal 申诉信息
     * @return 操作结果
     */
    R<CommentAppeal> submitAppeal(CommentAppeal commentAppeal);

    /**
     * 审核申诉
     *
     * @param id            申诉ID
     * @param status        审核状态 1:已通过, 2:已驳回
     * @param reviewReasons 审核原因（可选）
     * @return 操作结果
     */
    R<Boolean> auditAppeal(Integer id, Integer status, String reviewReasons);

    /**
     * 分页查询申诉列表（中台使用，支持多条件筛选）
     *
     * @param pageNum     页数
     * @param pageSize    页容
     * @param status      申诉状态 0:待处理, 1:已通过, 2:已驳回
     * @param orderNumber 评价单号（可选，模糊查询）
     * @param userName    用户姓名（可选，模糊查询）
     * @param userPhone   用户电话（可选）
     * @param lawyerName  律师姓名（可选）
     * @param lawyerPhone 律师电话（可选）
     * @param startTime   开始时间（可选，格式：yyyy-MM-dd HH:mm:ss）
     * @param endTime     结束时间（可选，格式：yyyy-MM-dd HH:mm:ss）
     * @return 分页结果
     */
    R<IPage<CommentAppealVo>> getAppealPage(Integer pageNum, Integer pageSize, Integer status,
                                             String orderNumber, String userName, String userPhone, String lawyerName, String lawyerPhone,
                                             String startTime, String endTime);

    /**
     * 获取申诉详情
     *
     * @param id 申诉ID
     * @return 申诉详情
     */
    R<CommentAppealVo> getAppealDetail(Integer id);

    /**
     * 分页申诉历史列表
     *
     * @param pageNum  页数
     * @param pageSize 页容
     * @param status   申诉状态 0:待处理, 1:已通过, 2:已驳回
     * @param lawyerUserId 评论ID（可选）
     * @return 分页结果
     */
    List<CommentAppealVo> getAppealHistory(Integer pageNum, Integer pageSize, Integer status, Integer lawyerUserId);
}


