package com.zanxiang.game.back.serve.pojo.vo;

import com.zanxiang.game.back.serve.pojo.BackPolicyOfSplitLevel;
import com.zanxiang.game.back.serve.pojo.BackPolicyOfSumRecharge;
import com.zanxiang.game.back.serve.pojo.TutorialFinish;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;

/**
 * <p>
 * 游戏回传策略表
 * </p>
 *
 * @author auto
 * @since 2023-06-01
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class GameBackPolicyVO implements Serializable {

    private static final long serialVersionUID = 1L;

    private Long id;

    private String backPolicyName;

    private Integer policyType;

    private BackPolicyOfSplitLevel typeOfSplitLevel;

    private BackPolicyOfSumRecharge typeOfSumRecharge;

    private TutorialFinish tutorialFinish;

    private Integer backUnit;

    /**
     * 首充-小额判定金额（小于等于）
     */
    private BigDecimal firstMinMoney;

    /**
     * 首充-小额回传方式（概率/比例）
     */
    private Integer firstMinMoneyType;

    /**
     * 首充-小额回传概率/比例
     */
    private String firstMinMoneyRate;

    /**
     * 首充-大额判定金额（大于等于）
     */
    private BigDecimal firstMaxMoney;

    /**
     * 首充-大额回传方式（概率/比例）
     */
    private Integer firstMaxMoneyType;

    /**
     * 首充-大额回传概率/比例
     */
    private String firstMaxMoneyRate;

    /**
     * 首充-其它金额回传方式（概率/比例）
     */
    private Integer firstOtherMoneyType;

    /**
     * 首充-其它金额回传概率/比例
     */
    private String firstOtherMoneyRate;

    /**
     * 首充-降档规则
     */
    private List<PolicyDownLevel> firstDownLevel;

    /**
     * 首充-按用户订单数卡单
     */
    private Integer firstBackCountOfUser;

    /**
     * 次单-小额判定金额（小于等于）
     */
    private BigDecimal rechargeMinMoney;

    /**
     * 次单-小额回传方式（概率/比例）
     */
    private Integer rechargeMinMoneyType;

    /**
     * 次单-小额回传概率/比例
     */
    private String rechargeMinMoneyRate;

    /**
     * 次单-大额判定金额（大于等于）
     */
    private BigDecimal rechargeMaxMoney;

    /**
     * 次单-大额回传方式（概率/比例）
     */
    private Integer rechargeMaxMoneyType;

    /**
     * 次单-大额回传概率/比例
     */
    private String rechargeMaxMoneyRate;

    /**
     * 次单-其它金额回传方式（概率/比例）
     */
    private Integer rechargeOtherMoneyType;

    /**
     * 次单-其它金额回传概率/比例
     */
    private String rechargeOtherMoneyRate;

    /**
     * 次单-降档规则
     */
    private List<PolicyDownLevel> rechargeDownLevel;

    /**
     * 次单-按用户订单数卡单
     */
    private Integer rechargeBackCountOfUser;

    private LocalDateTime createTime;

    private Long createBy;

    private String createName;

    private Long regPayIntervalTime;

    /**
     * 是否补单
     */
    private Boolean markUpOrder;

    /**
     * 补单-小额判定金额（小于等于）
     */
    private BigDecimal markUpOrderMinMoney;

    /**
     * 补单-小额回传方式（概率/比例）
     */
    private Integer markUpOrderMinMoneyType;

    /**
     * 补单-小额回传概率/比例
     */
    private String markUpOrderMinMoneyRate;

    /**
     * 补单-大额判定金额（大于等于）
     */
    private BigDecimal markUpOrderMaxMoney;

    /**
     * 补单-大额回传方式（概率/比例）
     */
    private Integer markUpOrderMaxMoneyType;

    /**
     * 补单-大额回传概率/比例
     */
    private String markUpOrderMaxMoneyRate;

    /**
     * 补单-其它金额回传方式（概率/比例）
     */
    private Integer markUpOrderOtherMoneyType;

    /**
     * 补单-其它金额回传概率/比例
     */
    private String markUpOrderOtherMoneyRate;

    /**
     * 补单-降档规则
     */
    private List<PolicyDownLevel> markUpDownLevel;

    /**
     * 补单-按用户订单数卡单
     */
    private Integer markUpBackCountOfUser;

    /**
     * backUnit == 大额、小额时生效
     * 大额判断金额
     */
    private BigDecimal largeAmount;

    /**
     * backUnit == 大额、小额时生效
     * 超小额判断金额（小于等于改值不回传）
     */
    private BigDecimal supperSmallAmount;

    /**
     * 拆单策略
     */
    private List<SplitStrategy> splitStrategy;

    /**
     * 激活回传开关
     */
    private Boolean activeBackSwitch;

    /**
     * 角色激活回传开关
     */
    private Boolean roleBackSwitch;

    /**
     * 最小回传等级
     */
    private Long roleLevelMin;

    /**
     * 监测链接回传
     */
    private Boolean linkCallBack;

    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    @Builder
    public static class PolicyDownLevel {

        private BigDecimal minMoney;

        private BigDecimal maxMoney;

        private BigDecimal backMoney;
    }

    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    @Builder
    public static class SplitStrategy {
        /**
         * 支付金额
         */
        private BigDecimal payMoney;
        /**
         * 拆分金额
         */
        private List<BigDecimal> splitList;
        /**
         * 回传间隔时间（/分钟）
         */
        private Integer betweenMinuteMin;
        /**
         * 回传间隔时间（/分钟）
         */
        private Integer betweenMinuteMax;
    }


}
