package com.rj.service.biz;

import com.baomidou.mybatisplus.extension.service.IService;
import com.rj.entity.CpaBrandScoreStatistics;

import java.time.LocalDate;
import java.util.List;
import java.util.Map;

/**
 * 经销商品牌得分统计表 服务类
 * 
 * @author 李中华
 * @date 2025/1/15
 */
public interface ICpaBrandScoreStatisticsService extends IService<CpaBrandScoreStatistics> {

    /**
     * 根据经销商编码和统计类型查询统计数据
     * 
     * @param dealerCode 经销商编码
     * @param statisticsType 统计类型
     * @return 统计数据列表
     */
    List<CpaBrandScoreStatistics> getByDealerCodeAndType(String dealerCode, String statisticsType);

    /**
     * 根据大区和统计类型查询统计数据
     * 
     * @param bigArea 大区
     * @param statisticsType 统计类型
     * @return 统计数据列表
     */
    List<CpaBrandScoreStatistics> getByBigAreaAndType(String bigArea, String statisticsType);

    /**
     * 根据日期范围查询统计数据
     * 
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @param statisticsType 统计类型
     * @return 统计数据列表
     */
    List<CpaBrandScoreStatistics> getByDateRange(LocalDate startDate, LocalDate endDate, String statisticsType);

    /**
     * 获取经销商排名统计
     * 
     * @param statisticsType 统计类型
     * @param limit 限制数量
     * @return 排名统计列表
     */
    List<Map<String, Object>> getDealerRanking(String statisticsType, Integer limit);

    /**
     * 获取大区排名统计
     * 
     * @param statisticsType 统计类型
     * @return 大区排名统计列表
     */
    List<Map<String, Object>> getBigAreaRanking(String statisticsType);

    /**
     * 批量保存统计数据
     * 
     * @param statisticsList 统计数据列表
     * @return 是否成功
     */
    boolean batchSave(List<CpaBrandScoreStatistics> statisticsList);

    /**
     * 根据条件删除统计数据
     * 
     * @param dealerCode 经销商编码
     * @param statisticsType 统计类型
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 是否成功
     */
    boolean deleteByCondition(String dealerCode, String statisticsType, LocalDate startDate, LocalDate endDate);

    /**
     * 生成并保存统计数据
     * 
     * @param statisticsType 统计类型
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @param createdBy 创建人
     * @return 生成的记录数
     */
    int generateAndSaveStatistics(String statisticsType, LocalDate startDate, LocalDate endDate, String createdBy);

    /**
     * 获取统计概览数据
     * 
     * @param statisticsType 统计类型
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 概览数据
     */
    Map<String, Object> getStatisticsOverview(String statisticsType, LocalDate startDate, LocalDate endDate);

    /**
     * 根据条件查询统计数据
     * 
     * @param dealerCode 经销商编码
     * @param bigArea 大区
     * @param statisticsType 统计类型
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 统计数据列表
     */
    List<CpaBrandScoreStatistics> getByCondition(String dealerCode, String bigArea, 
                                                String statisticsType, LocalDate startDate, LocalDate endDate);
}
