package com.yd.csf.service.dto;

import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.Date;

@Data
public class FortuneAddRequest implements Serializable {
    /**
     * 出账检核年月 yyyy-MM
     */
    @Schema(description = "出账检核年月 yyyy-MM")
    private String reconciliationYearMonth;

    /**
     * 应付款类型 R-关联保单应付款 U-非关联保单应付款
     */
    @Schema(description = "应付款类型 R-关联保单应付款 U-非关联保单应付款", requiredMode = Schema.RequiredMode.REQUIRED)
    private String fortuneBizType;

    /**
     * 保单号
     */
    @Schema(description = "保单号")
    private String policyNo;

    /**
     * 出账状态 0=待出账 1=可出帐，待检核 2=完成出账 3=部分出账 4=保留 5=已失效 6=可出帐，检核完成 7=未找到当前预计发佣对应的来佣
     */
    @Schema(description = "出账状态 0=待出账 1=可出帐，待检核 2=完成出账 3=部分出账 4=保留 5=已失效 6=可出帐，检核完成 7=未找到当前预计发佣对应的来佣, 字典值: csf_expected_fortune_status", requiredMode = Schema.RequiredMode.REQUIRED)
    private String status;

    /**
     * 出账期数(1=第一年; 2=第二年; 3=第三年; 4=第四年; 5=第五年)
     */
    @Schema(description = "出账期数(1=第一年; 2=第二年; 3=第三年; 4=第四年; 5=第五年)", requiredMode = Schema.RequiredMode.REQUIRED)
    private Integer fortunePeriod;

    /**
     * 出账总期数
     */
    @Schema(description = "出账总期数")
    private Integer fortuneTotalPeriod;

    /**
     * 转介人
     */
    @Schema(description = "转介人", requiredMode = Schema.RequiredMode.REQUIRED)
    private String broker;

    /**
     * 转介人业务ID
     */
    @Schema(description = "转介人业务ID")
    private String brokerBizId;

    /**
     * 所属团队
     */
    @Schema(description = "所属团队", requiredMode = Schema.RequiredMode.REQUIRED)
    private String team;

    /**
     * 所属团队业务ID
     */
    @Schema(description = "所属团队业务ID")
    private String teamBizId;

    /**
     * 出账项目名称
     */
    @Schema(description = "出账项目名称", requiredMode = Schema.RequiredMode.REQUIRED)
    private String fortuneName;

    /**
     * 出账项目类型
     */
    @Schema(description = "出账项目类型", requiredMode = Schema.RequiredMode.REQUIRED)
    private String fortuneType;

    /**
     * 保单币种金额
     */
    @Schema(description = "保单币种金额", requiredMode = Schema.RequiredMode.REQUIRED)
    private BigDecimal ruleAmount;

    /**
     * 保单币种
     */
    @Schema(description = "保单币种", requiredMode = Schema.RequiredMode.REQUIRED)
    private String ruleCurrency;

    /**
     * 保单币种→港币汇率（入账检核汇率）
     */
    @Schema(description = "保单币种→港币汇率（入账检核汇率）", requiredMode = Schema.RequiredMode.REQUIRED)
    private BigDecimal exchangeRate;

    /**
     * 原币种
     */
    @Schema(description = "原币种", requiredMode = Schema.RequiredMode.REQUIRED)
    private String originalCurrency;

    /**
     * 原币种金额
     */
    @Schema(description = "原币种金额", requiredMode = Schema.RequiredMode.REQUIRED)
    private BigDecimal originalAmount;

    /**
     * 原币种→港币汇率
     */
    @Schema(description = "原币种→港币汇率", requiredMode = Schema.RequiredMode.REQUIRED)
    private BigDecimal originalToHkdRate;

    /**
     * 发放币种
     */
    @Schema(description = "发放币种", requiredMode = Schema.RequiredMode.REQUIRED)
    private String payoutCurrency;

    /**
     * 发放币种金额
     */
    @Schema(description = "发放币种金额", requiredMode = Schema.RequiredMode.REQUIRED)
    private BigDecimal payoutAmount;

    /**
     * 港币→发放币种汇率
     */
    @Schema(description = "港币→发放币种汇率", requiredMode = Schema.RequiredMode.REQUIRED)
    private BigDecimal hkdToPayoutRate;

    /**
     * 港币金额
     */
    @Schema(description = "港币金额", requiredMode = Schema.RequiredMode.REQUIRED)
    private BigDecimal hkdAmount;

    /**
     * 出账年月(估)
     */
    @Schema(description = "出账年月(估)", requiredMode = Schema.RequiredMode.REQUIRED)
    private String payoutDate;

    /**
     * 出账年月(实)
     */
    @Schema(description = "出账年月(实)", requiredMode = Schema.RequiredMode.REQUIRED)
    private String actualPayoutDate;

    /**
     * 出账备注
     */
    @Schema(description = "出账备注")
    private String remark;

    private static final long serialVersionUID = 1L;
}
