package com.red.circle.other.infra.database.mongo.entity.bd;

import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.red.circle.other.infra.database.mongo.entity.bd.detail.BdLeaderTeamMemberDetail;
import com.red.circle.other.infra.enums.BdSettlementStatus;
import lombok.Data;
import lombok.experimental.Accessors;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;

import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
import java.sql.Timestamp;
import java.util.List;

/**
 * BD Leader 工资结算记录.
 *
 * @author AI Assistant
 * @since 2025-10-29
 */
@Data
@Accessors(chain = true)
@Document("bd_leader_salary_settlement_record")
public class BdLeaderSalarySettlementRecord implements Serializable {

    @Serial
    private static final long serialVersionUID = 1L;

    /**
     * ID.
     */
    @Id
    private String id;

    /**
     * 时序 ID.
     */
    @JsonSerialize(using = ToStringSerializer.class)
    private Long timeId;

    /**
     * 系统来源.
     */
    private String sysOrigin;

    /**
     * BD Leader 用户 ID.
     */
    @JsonSerialize(using = ToStringSerializer.class)
    private Long bdLeaderUserId;

    /**
     * 是否是管理员
     */
    private Boolean isAdmin;

    /**
     * 结算周期（格式：202501 表示2025年1月上半月，202502 表示2025年1月下半月）.
     */
    private Integer billBelong;

    /**
     * 结算周期标题（如：2025年1月上半月）.
     */
    private String billTitle;

    /**
     * BD 数量.
     */
    private Integer bdNumber;

    /**
     * 团队工资总和（美元）- 所有 BD 的工资总和.
     */
    private BigDecimal teamSalaryAmount;

    /**
     * 命中的等级.
     */
    private Integer hitLevel;

    /**
     * 基础工资（美元）- Basic Salary.
     */
    private BigDecimal basicSalary;

    /**
     * 奖励金额（美元）- Reward Amount.
     */
    private BigDecimal rewardAmount;

    /**
     * 是否满足奖励条件（本周期是否带来新充值代理）.
     */
    private Boolean rewardEligible;

    /**
     * 本周期新增充值代理数量.
     */
    private Integer newRechargeAgentCount;

    /**
     * 最终结算工资（美元）- Basic Salary + Reward Amount（如符合条件）.
     */
    private BigDecimal settlementSalary;

    /**
     * 结算状态：PENDING | SUCCESS | FAILED.
     */
    private BdSettlementStatus status;

    /**
     * 失败原因.
     */
    private String failureReason;

    /**
     * 幂等业务号（防重）.
     */
    private String bizNo;

    /**
     * 团队成员明细列表（BD 维度）.
     */
    private List<BdLeaderTeamMemberDetail> memberDetails;

    /**
     * 创建时间.
     */
    private Timestamp createTime;

    /**
     * 更新时间.
     */
    private Timestamp updateTime;
}
