package com.jeequan.jeepay.model;

import cn.hutool.core.lang.Assert;
import com.jeequan.jeepay.core.constants.CS;
import lombok.AllArgsConstructor;
import lombok.Data;

import java.util.List;

/**
 * TODO
 *
 * @author crystal
 * @date 2024/4/19 14:18
 */
@Data
@AllArgsConstructor
public class SeniorStrategy {

    /**
     * 顺序
     */
    public static final String SORT = "SORT";

    /**
     * 随机
     */
    public static final String RANDOM = "RANDOM";


    public static final String PREV = "PREV";

    public static final String OHTER = "OHTER";

    /**
     * 是否指定支付方式
     */
    private Byte isPayType;

    /**
     * 支付方式value值
     */
    private List<String> payTypeValue;

    /**
     * 是否指定结算类型
     */
    private Byte isSettleType;

    /**
     * 结算类型
     */
    private List<String> settleTypeValue;


    /**
     * 是否指定支付通道
     */
    private Byte isIfCode;

    /**
     * 支付通道
     */
    private String ifCodeValue;


    /**
     * 是否指定支付渠道
     */
    private Byte isIsvNo;

    /**
     * 支付渠道
     */
    private String isvNoValue;

    /**
     * 指定路由类型
     */
    private Byte isRouteType;


    /**
     * 路由值 RANDOM：随机
     * SORT：顺序
     */
    private String routeTypeValue;


    /**
     * 是否指定费用最低
     */
    private Byte isCostRateMin;

    /**
     * 是否优先使用成功率最高
     */
    private Byte isSucRateMax;

    /**
     * 用户交易策略
     */
    private Byte isTradeRule;

    /**
     * 用户交易策略
     */
    private String tradeRuleValue;

    /**
     * 是否指定权重
     */
    private Byte isWeight;


    public void preCheck() {
        if(this.getIsPayType() == null){
            this.setIsPayType(CS.NO);
        }
        if(CS.YES == this.getIsPayType()){
            Assert.notEmpty(this.getPayTypeValue(),"开启指定支付方式，支付方式类型不能为空");
        }
        if(this.getIsSettleType() == null){
            this.setIsSettleType(CS.NO);
        }
        if(CS.YES == this.getIsSettleType()){
            Assert.notEmpty(this.getSettleTypeValue(),"开启指定结算类型，结算类型不能为空");
        }
        if(this.getIsIfCode() == null){
            this.setIsIfCode(CS.NO);
        }
        if(CS.YES == this.getIsIfCode()){
            Assert.notEmpty(this.getIfCodeValue(),"开启指定支付通道，支付通道不能为空");
        }
        if(this.getIsIsvNo() == null){
            this.setIsIsvNo(CS.NO);
        }
        if(CS.YES == this.getIsIsvNo()){
            Assert.notEmpty(this.getIsvNoValue(),"开启指定支付渠道，支付渠道不能为空");
        }
        if(this.getIsRouteType() == null){
            this.setIsRouteType(CS.NO);
        }
        if(CS.YES == this.getIsRouteType()){
            Assert.notEmpty(this.getRouteTypeValue(),"开启指定路由类型，路由类型不能为空");
        }
        if(this.getIsCostRateMin() == null){
            this.setIsCostRateMin(CS.NO);
        }
        if(this.getIsSucRateMax() == null){
            this.setIsSucRateMax(CS.NO);
        }
        if(this.getIsTradeRule() == null){
            this.setIsTradeRule(CS.NO);
        }
        if(CS.YES == this.getIsTradeRule()){
            Assert.notEmpty(this.getTradeRuleValue(),"开启交易策略，交易策略不能不能为空");
        }
        if(this.getIsWeight() == null){
            this.setIsWeight(CS.NO);
        }
    }

    public SeniorStrategy() {
        this.isPayType = CS.NO;
        this.isSettleType = CS.NO;
        this.isIfCode = CS.NO;
        this.isRouteType = CS.NO;
        this.isCostRateMin = CS.NO;
        this.isSucRateMax = CS.NO;
        this.isTradeRule = CS.NO;
        this.isWeight = CS.NO;
    }
}
