package com.ruoyi.excel.wecom.domain;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 * 客户统计数据V2（支持标签级成本，行列转换存储）
 * 与V1的区别：
 * 1. V1：行是指标，列是组
 * 2. V2：行是组/标签，列是指标
 */
@Data
@TableName("customer_statistics_data_v2")
public class CustomerStatisticsDataV2 implements Serializable {
    private static final long serialVersionUID = 1L;

    @TableId(type = IdType.AUTO)
    private Long id;

    private String corpId;

    private Date curDate;

    /**
     * 组名（N组、O组等）
     */
    private String groupName;

    /**
     * 标签名（NULL表示组级汇总）
     */
    private String tagName;

    /**
     * 标签组ID（关联wecom_tag_group）
     */
    private String tagGroupId;

    /**
     * 标签ID（关联wecom_tag）
     */
    private String tagId;

    /**
     * 数据级别：1-组级汇总，2-标签级明细
     */
    private Integer dataLevel;

    /**
     * 父记录ID（标签级数据对应组级记录的ID）
     */
    private Long parentId;

    // ==================== 成本数据 ====================
    /**
     * 总成本（手工录入）
     */
    private BigDecimal totalCost;

    /**
     * 单条成本（计算得出）
     */
    private BigDecimal singleCost;

    /**
     * 成单成本（计算得出）
     */
    private BigDecimal orderCost;

    /**
     * 成本录入类型：total-总成本，single-单条成本
     */
    private String costInputType;

    // ==================== 数量指标 ====================
    /**
     * 成单数
     */
    private Integer orderCount;

    /**
     * 进粉数
     */
    private Integer customerCount;

    /**
     * 及时单数
     */
    private Integer timelyOrderCount;

    /**
     * 非及时单数
     */
    private Integer nonTimelyOrderCount;

    // ==================== 比率指标 ====================
    /**
     * 转化率
     */
    private String conversionRate;

    /**
     * 及时单占比
     */
    private String timelyRate;

    /**
     * 非及时单占比
     */
    private String nonTimelyRate;

    // ==================== 客户属性指标 ====================
    /**
     * 客户属性数量
     */
    private Integer customerAttrCount;

    /**
     * 家长数量
     */
    private Integer parentCount;

    /**
     * 学生数量
     */
    private Integer studentCount;

    /**
     * 老师数量
     */
    private Integer teacherCount;

    /**
     * 未知属性数量
     */
    private Integer unknownAttrCount;

    /**
     * 家长占比
     */
    private String parentRate;

    /**
     * 学生占比
     */
    private String studentRate;

    /**
     * 老师占比
     */
    private String teacherRate;

    /**
     * 未知占比
     */
    private String unknownRate;

    // ==================== 出单率指标 ====================
    private Integer parentOrderCount;
    private Integer studentOrderCount;
    private Integer teacherOrderCount;
    private Integer unknownOrderCount;

    private Integer parentDailyCount;
    private Integer studentDailyCount;
    private Integer teacherDailyCount;
    private Integer unknownDailyCount;

    private Integer parentDailyOrderCount;
    private Integer studentDailyOrderCount;
    private Integer teacherDailyOrderCount;
    private Integer unknownDailyOrderCount;

    private String parentOrderRate;
    private String studentOrderRate;
    private String teacherOrderRate;
    private String unknownOrderRate;

    // ==================== 意向度指标 ====================
    private Integer intentionCount;
    private Integer activeQuoteCount;
    private Integer passiveQuoteCount;
    private Integer noQuoteCount;
    private Integer deletedQuoteCount;

    private String activeQuoteRate;
    private String passiveQuoteRate;
    private String noQuoteRate;
    private String deletedQuoteRate;

    // ==================== 年级指标 ====================
    private Integer gradeCount;
    private Integer primaryCount;
    private Integer middleCount;
    private Integer highCount;

    private String primaryRate;
    private String middleRate;
    private String highRate;

    // ==================== 其他 ====================
    private Integer sortNo;

    private Date createTime;

    private Date updateTime;

    // ==================== 非持久化字段 ====================
    /**
     * 年份周数显示（如：2026年第10周）
     */
    @TableField(exist = false)
    private String yearWeek;

    /**
     * 年月显示（如：2026年03月）
     */
    @TableField(exist = false)
    private String yearMonth;

    /**
     * 日期范围显示（如：2026-03-02 至 2026-03-08）
     */
    @TableField(exist = false)
    private String dateRange;

    /**
     * 子标签列表（用于树状展示）
     */
    @TableField(exist = false)
    private List<CustomerStatisticsDataV2> children;

    /**
     * 是否为叶子节点（标签级）
     */
    @TableField(exist = false)
    private Boolean leaf;

    /**
     * 节点显示名称（组名或标签名）
     */
    public String getDisplayName() {
        if (tagName != null && !tagName.isEmpty()) {
            return tagName;
        }
        return groupName;
    }

    /**
     * 获取完整路径（用于树状展示）
     */
    public String getFullPath() {
        if (tagName != null && !tagName.isEmpty()) {
            return groupName + "/" + tagName;
        }
        return groupName;
    }
}
