package shop.alien.store.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.CommonRating;
import shop.alien.entity.store.vo.CommonRatingVo;
import shop.alien.entity.store.vo.MyMergedReviewItemVo;

/**
 * 评价表 服务类
 *
 * @author lyx
 * @since 2025-01-XX
 */
public interface CommonRatingService extends IService<CommonRating> {

    /**
     * 新增人员评价
     *
     * @param commonRating 评价信息
     * @return 是否成功
     */
    Integer saveCommonRating(CommonRating commonRating);

    /**
     * 分页查询评价列表
     *
     * @param pageNum      页数
     * @param pageSize     页容
     * @param businessType 业务类型：1-订单评价 2-商品评价 3-店铺评价 4-活动评价
     * @param businessId   业务关联ID
     * @param userId       用户ID
     * @param auditStatus  审核状态：0-待审核 1-通过 2-驳回
     * @param searchScore  搜索评分：0-全部,1-好评 2-中评 3-差评,4-有图
     * @param days         查询时间, 多少天前
     * @param replyStatus  回复状态(0:全部, 1:已回复, 2:未回复)
     * @param tagId        标签id
     * @return IPage<CommonRating>
     */
    R getRatingList(Integer pageNum, Integer pageSize, Integer businessType, Long businessId, Long userId, Integer auditStatus, Integer searchScore, Integer days, Integer replyStatus, Integer tagId);

     /**
     * 获取店铺评价数量（好评，中评，差评）
     *
     * @param businessId  业务ID
     * @param businessType 业务类型：1-订单评价 2-商品评价 3-店铺评价 4-活动评价
     * @return 评价数量
     */
    Object getRatingCount(Integer businessId, Integer businessType);

     /**
     * 获取评价详情
     *
     * @param ratingId 评价ID
     * @return 评价详情
     */
    Object getRatingDetail(Integer ratingId, Long userId);

    /**
     * 删除评价后更新店铺评分
     * 
     * @param businessId 店铺ID
     */
    void updateStoreScoreAfterDelete(Integer businessId);

    /**
     * 查询我的评价
     * @param pageNum
     * @param pageSize
     * @param businessType
     * @param userId
     * @param auditStatus
     * @return
     */
    R getMyRatingList(Integer pageNum, Integer pageSize, Integer businessType, Long userId, Integer auditStatus);

    /**
     * 融合「门店我的评价」与「律师订单我的评价」，按发布时间倒序分页。
     * 分页说明：从两侧各取至多 pageNum*pageSize 条（上限 1000）合并后再截取当前页。
     */
    R<IPage<MyMergedReviewItemVo>> getMyMergedRatingList(Integer pageNum, Integer pageSize, Integer businessType,
                                                         Long userId, Integer auditStatus, Integer currentUserId);

    R<IPage<CommonRatingVo>> doListBusinessWithType(IPage<CommonRating> page2, Integer i, Long userId, Integer replyStatus);

  /*  /**
     * 根据业务类型和业务ID获取平均评分
     *
     * @param businessType 业务类型
     * @param businessId   业务ID
     * @return 平均评分

    Double getAverageScore(Integer businessType, Long businessId);

    *
     * 根据业务类型和业务ID获取评价数量
     *
     * @param businessType 业务类型
     * @param businessId   业务ID
     * @return 评价数量

    Long getRatingCount(Integer businessType, Long businessId);*/
}

