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

import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.red.circle.other.infra.database.mongo.dto.team.SettlementBatch;
import com.red.circle.other.infra.database.mongo.dto.team.TeamBillSettleResult;
import com.red.circle.other.inner.model.dto.agency.agency.TeamRemark;
import com.red.circle.other.inner.enums.team.TeamBillCycleStatus;
import java.io.Serial;
import java.io.Serializable;
import java.sql.Timestamp;
import java.time.LocalDate;
import java.util.List;
import lombok.Data;
import lombok.experimental.Accessors;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.index.CompoundIndex;
import org.springframework.data.mongodb.core.mapping.Document;

/**
 * 团队账单周期.
 *
 * @author pengliang on 2022/12/1
 */
@Data
@Accessors(chain = true)
@Document("team_bill_cycle")
@CompoundIndex(name = "idx_billBelong_status", def = "{'billBelong': 1, 'status': 1}")
public class TeamBillCycle implements Serializable {

  @Serial
  private static final long serialVersionUID = 1L;

  /**
   * 账单ID.
   */
  @Id
  @JsonSerialize(using = ToStringSerializer.class)
  private Long id;

  /**
   * 归属系统.
   */
  private String sysOrigin;

  /**
   * 团队id.
   */
  private Long teamId;

  /**
   * 区域.
   */
  private String region;

  /**
   * 状态
   */
  private TeamBillCycleStatus status;

    // ===== 新增字段（用于批次模式）=====

    /**
     * 是否启用批次模式.
     * true: 月度账单模式（两次结算共享一个账期）
     * false: 传统半月账单模式（每次结算独立账期）
     * 默认：false（兼容历史数据）
     */
    private Boolean batchMode;

    /**
     * 结算批次号（仅批次模式下有效）.
     * 1 = 上半月（1-15号）
     * 2 = 下半月（16-月末）
     * null: 传统模式（兼容历史数据）
     */
    private Integer settlementBatch;

    /**
     * 月度账期（仅批次模式下有效）.
     * 格式：yyyyMM (如 202511)
     * 用于前端按月聚合查询
     * null: 传统模式（兼容历史数据）
     */
    private Integer monthlyBillBelong;


  /**
   * 结算结果.
   */
  private TeamBillSettleResult settleResult;

  /**
   * 内部备注.
   */
  private List<TeamRemark> internalRemarks;

  /**
   * 账单归属.
   */
  private Integer billBelong;

  /**
   * 账单标题.
   */
  private String billTitle;

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

  /**
   * 修改时间.
   */
  private Timestamp updateTime;

  /**
   * 创建用户.
   */
  @JsonSerialize(using = ToStringSerializer.class)
  private Long createUser;

  /**
   * 修改用户.
   */
  @JsonSerialize(using = ToStringSerializer.class)
  private Long updateUser;

}
