package shop.alien.store.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import org.springframework.web.multipart.MultipartRequest;
import shop.alien.entity.store.StoreComment;
import shop.alien.entity.store.vo.LifeUserOrderCommentVo;
import shop.alien.entity.store.vo.StoreCommentCountVo;
import shop.alien.entity.store.vo.StoreCommentVo;
import shop.alien.entity.store.vo.StoreCommitPercentVo;
import shop.alien.entity.store.vo.UserOrderVo;

import java.util.Map;

/**
 * 评论表 服务类
 *
 * @author ssk
 * @since 2025-01-02
 */
public interface StoreCommentService extends IService<StoreComment> {

    /**
     * 评论列表
     *
     * @param pageNum      页数
     * @param pageSize     页容
     * @param businessId   业务id
     * @param businessType 业务类型(1:订单评论, 2:动态社区评论, 3:活动评论, 4:店铺打卡评论, 5:订单评价, 6:订单评论的评论)
     * @param storeId      门店id
     * @param replyStatus  回复状态(0:全部, 1:已回复, 2:未回复)
     * @param commentLevel 评论等级(0:全部, 1:好评, 2:中评, 3:差评)
     * @param days         查询时间, 多少天前
     * @param phoneId      消息标识
     * @param userType     评论的用户类型(0:商家, 其他:用户)
     * @param tagId        标签id
     * @param hasImage     是否有图片(0否/1是)
     * @return IPage<StoreComment>
     */
    IPage<StoreCommentVo> getList(Integer pageNum, Integer pageSize, Integer businessId, Integer businessType, Integer storeId, Integer replyStatus, Integer commentLevel, Integer days, String phoneId, Integer userType, Integer tagId, Boolean hasImage);

    /**
     * 获取最新一条评论/评价
     *
     * @param businessId   业务id
     * @param businessType 业务类型(1:订单评论, 2:动态社区评论, 3:活动评论,4:店铺打卡评论)
     * @param storeId      门店id
     * @return StoreCommentVo
     */
    StoreCommentVo getOne(Integer businessId, Integer businessType, Integer storeId);

    /**
     * 评论/评价数量和评分
     *
     * @param businessId   业务id
     * @param businessType 业务类型(1:订单评论, 2:动态社区评论, 3:活动评论,4:店铺打卡评论)
     * @param storeId      门店id
     * @return Integer
     */
    Map<String, Object> getCommitCountAndScore(Integer businessId, Integer businessType, Integer storeId, String phoneId, Integer days);

    /**
     * 评论
     *
     * @param multipartRequest 文件
     * @param businessId       业务id
     * @param businessType     业务类型(1:订单评论, 2:动态社区评论, 3:活动评论,4:店铺打卡评论)
     * @param storeId          门店id
     * @param userId           用户id
     * @param replyId          回复id
     * @param commentContent   评价内容
     * @return 0:成功, 1:失败, 2:文本内容异常, 3:图片内容异常
     */
    Integer userComment(MultipartRequest multipartRequest, Integer businessId, Integer businessType, Integer storeId, Integer userId, Integer replyId, String commentContent);

    /**
     * 新增或修改评论/评价
     *
     * @param multipartRequest 文件
     * @param id               主键
     * @param businessId       业务id
     * @param businessType     业务类型(1:订单评论, 2:动态社区评论, 3:活动评论,4:店铺打卡评论)
     * @param storeId          门店id
     * @param userId           用户id
     * @param replyId          回复id
     * @param commentContent   评价内容
     * @param score            评分
     * @param otherScore       其他评分
     * @param isAnonymous      是否匿名(0:否(默认), 1:是)
     * @param evaluationTags   评价标签
     * @param phoneId          用户id
     * @return 0:成功, 1:失败, 2:文本内容异常, 3:图片内容异常
     */
    Integer addComment(MultipartRequest multipartRequest, Integer id, Integer businessId, Integer businessType, Integer storeId, Integer userId, Integer replyId, String commentContent, Double score, String otherScore, Integer isAnonymous, String evaluationTags, String phoneId);


    /**
     * 回复率, 评价比例
     *
     * @param storeId 门店id
     * @return StoreCommitPercentVo
     */
    StoreCommitPercentVo getCommitPercent(Integer storeId);

    /**
     * @param type 1:未评价, 2:已评价
     */
    IPage<LifeUserOrderCommentVo> getCommentOrderPage(Integer pageNum, Integer pageSize, Integer type, String userId);

    /**
     * 获取店铺评价计数统计
     *
     * @param storeId 门店id
     * @return StoreCommentCountVo
     */
    StoreCommentCountVo getAppraiseCount(Integer storeId);

    /**
     * 分页查询当前用户所有订单（包含商户订单和律师订单）
     *
     * @param pageNum 页数
     * @param pageSize 页容
     * @param userId 用户ID
     * @param type 订单类型：1-未评价，2-已评价
     * @return 订单分页列表
     */
    IPage<UserOrderVo> getUserAllOrders(Integer pageNum, Integer pageSize, Integer userId, Integer type);

    /**
     * 新增或修改评论/评价(仅店铺)
     * @param imageUrls 图片url
     * @param id               主键
     * @param businessType     业务类型(1:订单评论, 2:动态社区评论, 3:活动评论,4:店铺打卡评论)
     * @param storeId          门店id
     * @param userId           用户id
     * @param replyId          回复id
     * @param commentContent   评价内容
     * @param score            评分
     * @param otherScore       其他评分
     * @param isAnonymous      是否匿名(0:否(默认), 1:是)
     * @return 0:成功, 1:失败, 2:文本内容异常, 3:图片内容异常
     */
    Integer saveCommentOnlyStore(String imageUrls, Integer id, Integer businessType, Integer storeId, Integer userId, Integer replyId, String commentContent, Double score, String otherScore, Integer isAnonymous);
}
