package shop.alien.store.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import org.springframework.http.ResponseEntity;
import org.springframework.web.multipart.MultipartRequest;
import shop.alien.entity.store.StoreCommentAppeal;
import shop.alien.entity.store.vo.StoreCommentAppealInfoVo;
import shop.alien.entity.store.vo.StoreCommentAppealVo;

import java.util.Map;

/**
 * 评论申诉表 服务类
 *
 * @author ssk
 * @since 2025-01-02
 */
public interface StoreCommentAppealService extends IService<StoreCommentAppeal> {

    /**
     * 申诉历史-分页
     *
     * @param pageNum      页数
     * @param pageSize     页容
     * @param storeId      门店id
     * @param appealStatus 申诉状态: 0:待处理, 1:已驳回, 2:已同意
     * @return IPage<StoreCommentAppeal>
     */
    IPage<StoreCommentAppealVo> getAppealHistory(Integer pageNum, Integer pageSize, Integer storeId, String appealStatus);

    /**
     * 申诉历史各状态数量
     * @param storeId      门店id
     */
    Map<String, Integer> getAppealHistoryCountStatus(Integer storeId);

    /**
     * 新增申诉
     *
     * @param multipartRequest 文件
     * @param storeId          门店id
     * @param commentId        评论id
     * @param appealReason     申诉原因
     * @return Integer(0 : 申诉成功, 1 : 申诉失败, 2 : 申诉已存在, 3 : 文本内容异常)
     */
    Integer addAppeal(MultipartRequest multipartRequest, Integer storeId, Integer commentId, String appealReason);

    /**
     * 新增申诉
     *
     * @param imgUrls       申诉图片OSS地址，多个用英文逗号分隔
     * @param storeId       门店id
     * @param commentId     评论id
     * @param appealReason  申诉原因
     * @return StoreCommentAppealInfoVo(result: 0申诉成功, 1申诉失败, 2申诉已存在, 3文本内容异常)
     */
    StoreCommentAppealInfoVo addAppealNew(String imgUrls, Integer storeId, Integer commentId, String appealReason);



    /**
     * 申诉详情
     *
     * @param id 申诉id
     * @return StoreCommentAppealVo
     */
    StoreCommentAppealVo getStoreCommentAppealDetail(Integer id);

    /**
     * 按评价ID查询申诉详情（comment_id 关联 common_rating.id）
     *
     * @param commentId 评价ID
     * @return StoreCommentAppealVo
     */
    StoreCommentAppealVo getStoreCommentAppealDetailByCommentId(Integer commentId);

    /**
     * web-申诉分页查询
     *
     * @param pageNum      页数
     * @param pageSize     页容
     * @param storeName    门店名称
     * @param storeContact 门店联系人
     * @param storePhone   门店电话
     * @param appealStatus 申诉状态: 0:待处理, 1:已驳回, 2:已同意
     * @return IPage<StoreCommentAppealVo>
     */
    IPage<StoreCommentAppealVo> getStoreAppealPage(Integer pageNum, Integer pageSize, String storeName, String storeContact, String storePhone, String appealStatus);

    /**
     * 修改申诉状态
     *
     * @param id           申诉id
     * @param appealStatus 申诉状态: 0:待处理, 1:已驳回, 2:已同意
     * @return boolean
     */
    boolean setAppealStatus(Integer id, Integer appealStatus,String logRemark);

    /**
     * 导出Excel
     *
     * @return ResponseEntity
     */
    ResponseEntity<byte[]> exportToExcel();

    /**
     * 判断用户是否可以评价，并返回最新申诉通过记录及10天冷却倒计时
     *
     * @param userId 用户ID
     * @return canRate-是否可评价, passedCount-近30天申诉通过次数, latestPassedAppeal-最新通过记录, countdown-10天内剩余冷却（X天）
     */
    Map<String, Object> canRate(Integer userId);
}
