package com.jeequan.jeepay.core.model.device;

import com.alibaba.fastjson.JSONObject;
import com.jeequan.jeepay.core.utils.StringKit;
import lombok.Data;
import org.apache.commons.lang3.StringUtils;

/***
* 厂商设备参数   智网
*
* @author zx
*
* @date 2021/12/30 9:01
*/
@Data
public class ZwParams extends DeviceParams {

    public ProviderParams providerParams;

    public DeviceParams deviceParams;

    public BizConfigParams bizConfigParams;

    public ZwParams(ProviderParams providerParams) {
        this.providerParams = providerParams;
    }

    public ZwParams(ProviderParams providerParams, DeviceParams deviceParams, BizConfigParams bizConfigParams) {
        this.providerParams = providerParams;
        this.deviceParams = deviceParams;
        this.bizConfigParams = bizConfigParams;
    }

    @Data
    public static class ProviderParams {
        /**
         * token
         */
        private String token;

        /**
         * md5Key
         */
        private String md5Key;

        /**
         * 支付成功语音播报内容
         */
        private String customContent;
    }

    @Data
    public static class DeviceParams {

        // 设备号
        private String deviceNo;

        // 是否配置打印机参数 0-不配置 1-配置
        private Byte configFlag;

        // 是否截获收银小票金额 0-关闭  1-开启
        private Integer billCap;

        // 收银小票打印标志 0-不打印 1-支付前打印 2-支付后打印（默认值）
        private Integer billPrint;

        // 支付超时时间，单位：秒 超时退出支付并打印收银小票
        private Integer billTimeout;

        // 交易结果查询时间间隔，单位：秒
        private Integer queryInterval;

        // 最大交易结果查询次数
        private Integer queryNum;

        // 16字节唯一验证码 从开机时打印的参数配置码中提取 参数配置码格式：sn,authcode
        private String authCode;

        // 支付错误信息打印标志 支付失败时是否打印错误信息 true-打印 false-不打印 默认值
        private Boolean errInfoPrint;

        // 退款码打印标志 支付成功小票中是否打印退款码 true-打印  默认值 false-不打印
        private Boolean refundCodePrint;

        // 厂商编号 如果为-1 人工配置参数 否则为预配置参数
        private String providerCode;

        /** 人工配置参数 **/
        // 获取收银小票支付金额关键字，每个关键字直接用逗号分隔，不能带空格 (实收,应收,总价,总计,合计)
        private String keywordCap;
        // 放弃支付（小票放行关键字），每个关键字直接用逗号分隔，不能带空格 (店名,销售商品报表)
        private String keywordSkip;
        // 收银单号前缀
        private String orderPrefix;
        // 重复的订单编号，是否跳过 true/false
        private Boolean orderSkip;

        /** 预配置参数 **/
        // 预配置时，收银小票金额拦截关键字，只允许一个关键字
        private String presetPrefix;
        // 软件编号
        private String softCode;
        // 软件名称
        private String softName;
        // 时间戳
        private String timestamp;
        // 支付参数
        private String presetData;
    }

    @Data
    public static class BizConfigParams {

        /**
         * 打印联数
         */
        private Integer printNum;

        /**
         * 打印机模式
         */
        private Byte printMode;

    }

    @Override
    public String deSenData() {
        ProviderParams params = this.getProviderParams();
        if (params != null && StringUtils.isNotBlank(params.getToken())) {
            params.setToken(StringKit.autoDesensitization(params.getToken()));
        }
        if (params != null && StringUtils.isNotBlank(params.getMd5Key())) {
            params.setMd5Key(StringKit.autoDesensitization(params.getMd5Key()));
        }

        return JSONObject.toJSONString(params);
    }

}
