package com.jeequan.jeepay.db.entity;

import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
import com.jeequan.jeepay.core.model.BaseModel;
import com.jeequan.jeepay.core.model.MchExtInfo;
import com.jeequan.jeepay.db.typehandler.EncryptTypeHandler;
import com.jeequan.jeepay.db.typehandler.MchExtInfoListHandler;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

import java.util.Date;
import java.util.List;

/**
 * <p>
 * 商户应用表
 * </p>
 *
 * @author [mybatis plus generator]
 * @since 2021-06-15
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName(value = "t_mch_app", autoResultMap = true)
public class MchAppEntity extends BaseModel {

    public static final Byte DISABLE = 0;

    public static final Byte NORMAL = 1;

    public static final Byte AUDIT = 2;

    public static final Byte REJECT = -1;

    private static final long serialVersionUID=1L;

    /**
     * 线下
     */
    public static final byte OFFLINE = 0;

    /**
     * 线上
     */
    public static final byte ONLINE = 1;



    public static final LambdaQueryWrapper<MchAppEntity> gw(){
        return new LambdaQueryWrapper<>();
    }

    /**
     * 应用ID
     */
    @TableId(value = "app_id", type = IdType.INPUT)
    private String appId;


    /**
     * 应用私钥(MD5)
     */
    @TableField(typeHandler = EncryptTypeHandler.class)
    private String appSecret;

    /**
     * 应用名称
     */
    private String appName;

    /**
     * 商户号
     */
    private String mchNo;

    /**
     * 服务商号
     */
    private String agentNo;

    /**
     * 顶级服务商号
     */
    private String topAgentNo;

    /**
     * 是否默认: 0-否、 1-是（api接口未显式指定应用则使用默认应用）
     */
    private Byte defaultFlag;

    /**
     * 应用状态: 0-停用, 1-正常 2:审核中 -1：审核驳回
     */
    private Byte state;

    /**
     * 审核意见
     */
    private String stateDesc;

    /**
     * 轮询绑定状态。0 - 未开通；1 - 已开通自动绑定；2 - 不开通自动绑定
     */
    private int pollingBindState;

    /**
     * 支持的加签方式: MD5、 RSA2（若使用系统测试或者app必须支持MD5）
     */
    private String appSignType;

    /**
     * 应用公钥（RSA2）
     */
    private String appRsa2PublicKey;

    /**
     * 备注
     */
    private String remark;

    /**
     * 创建者用户ID
     */
    private Long createdUid;

    /**
     * 创建者姓名
     */
    private String createdBy;

    /**
     * 创建时间
     */
    private Date createdAt;

    /**
     * 更新时间
     */
    private Date updatedAt;

    /**
     * 0: 线下，
     * 1: 线上
     */
    @TableField("`range`")
    private Integer range;

    /**
     * 是否支持API,
     * 0: 不支持
     * 1: 支持
     */
    private Integer apiFlag;

    /**
     * 应用信息
     */
    @TableField(typeHandler = MchExtInfoListHandler.class)
    private List<MchExtInfo> information;

    private String mccCode;

    @TableField(typeHandler = FastjsonTypeHandler.class)
    private List<JSONObject> qualificationList;

    /*预开通的方案id多个用英文逗号隔开*/
    private String predicOpenPackage;

    /*预开通的产品id多个用英文逗号隔开*/
    private String predicOpenProduct;

    @TableField(exist = false)
    List<String> subAgentNoList;

    @TableField(exist = false)
    List<String> finalMchNoList;

    /**
     * 服务商号
     */
    @TableField(exist = false)
    private String agentName;

    @TableField(exist = false)
    private String mchName;

    @TableField(exist = false)
    private String unionSearchId;

    @TableField(exist = false)
    private Integer mchType;

}
