package com.ruoyi.excel.wecom.helper;

import lombok.Data;

import java.math.BigDecimal;
import java.util.LinkedHashMap;
import java.util.Map;

/**
 * 统计累加器 - 用于分页处理时累加统计结果
 */
@Data
public class StatisticsAccumulator {

    /**
     * 为每个组维护统计数据
     * Key: 组名（N组、O组等）
     * Value: 该组的统计数据
     */
    private Map<String, GroupStatistics> groupStatsMap = new LinkedHashMap<>();

    /**
     * 初始化所有需要统计的组
     */
    public StatisticsAccumulator() {
        // 需要统计的11个组
        String[] groupNames = {"N组", "O组", "P组", "W组", "X组", "Y组", "Z组", "AA组", "AC组", "AD组", "AE组"};
        for (String groupName : groupNames) {
            groupStatsMap.put(groupName, new GroupStatistics());
        }
    }

    /**
     * 获取指定组的统计数据
     */
    public GroupStatistics getGroupStats(String groupName) {
        return groupStatsMap.get(groupName);
    }

    /**
     * 单个组的统计数据
     */
    @Data
    public static class GroupStatistics {
        // ========== 基础统计 ==========
        /**
         * 成单数
         */
        private int orderCount = 0;

        /**
         * 进粉数
         */
        private int customerCount = 0;

        /**
         * 及时单数
         */
        private int timelyOrderCount = 0;

        /**
         * 非及时单数
         */
        private int nonTimelyOrderCount = 0;

        // ========== 客户属性统计 ==========
        /**
         * 客户属性总数（非空）
         */
        private int totalCustomerAttr = 0;

        /**
         * 家长数
         */
        private int parentCount = 0;

        /**
         * 学生数
         */
        private int studentCount = 0;
        /**
         * 老师
         */
        private int teacherCount = 0;

        /**
         * 未知（空白）数
         */
        private int unknownAttrCount = 0;

        // ========== 意向度统计 ==========
        /**
         * 意向度总数（非空）
         */
        private int totalIntention = 0;

        /**
         * 主动报价数
         */
        private int activeQuoteCount = 0;

        /**
         * 被动报价数
         */
        private int passiveQuoteCount = 0;

        /**
         * 未开口数
         */
        private int noQuoteCount = 0;

        /**
         * 已删除数
         */
        private int deletedQuoteCount = 0;

        // ========== 年级统计 ==========
        /**
         * 年级总数（非空）
         */
        private int totalGrade = 0;

        /**
         * 小学数
         */
        private int primaryCount = 0;

        /**
         * 初中数
         */
        private int middleCount = 0;

        /**
         * 高中数
         */
        private int highCount = 0;

        // ========== 出单占比统计 ==========
        /**
         * 家长出单数
         */
        private int parentOrderCount = 0;

        /**
         * 学生出单数
         */
        private int studentOrderCount = 0;
        /**
         * 老师出单数
         *
         */
        private int teacherOrderCount = 0;

        private int unkownOrderCount = 0;

        // ========== 新增：家长/学生出单率统计（当日） ==========
        /**
         * 家长出单数（当日成交）- 满足Q列=当日 AND T列=已成交及时单9元+
         */
        private int parentDailyOrderCount = 0;

        /**
         * 家长总数（当日进粉）- 用于出单率分母
         */
        private int parentDailyCount = 0;

        /**
         * 学生出单数（当日成交）- 满足Q列=当日 AND T列=已成交及时单9元+
         */
        private int studentDailyOrderCount = 0;


        /**
         * 学生总数（当日进粉）- 用于出单率分母
         */
        private int studentDailyCount = 0;
        /**
         * 老师总数（当日进粉）- 用于出单率分母
         */
        private int teacherDailyCount = 0;
        /**
         * 未知总数（当日进粉）- 用于出单率分母
         */
        private int unkownDailyCount = 0;

        /**
         * 学生出单数（当日成交）- 满足Q列=当日 AND T列=已成交及时单9元+
         */
        private int teacherDailyOrderCount = 0;

        /**
         * 学生出单数（当日成交）- 满足Q列=当日 AND T列=已成交及时单9元+
         */
        private int unkownDailyOrderCount = 0;

        // ========== 成本数据 ==========
        /**
         * 总成本（手工填写）
         */
        private BigDecimal totalCost = BigDecimal.ZERO;
    }
}
