package com.jeequan.jeepay.db.entity;

import com.alibaba.fastjson.JSONObject;
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.jeequan.jeepay.core.entity.TransferSubject;
import com.jeequan.jeepay.core.model.BaseModel;
import com.jeequan.jeepay.core.validate.Add;
import com.jeequan.jeepay.db.typehandler.EncryptTypeHandler;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

import javax.validation.constraints.NotEmpty;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 * <p>
 * 转账对象表
 * </p>
 *
 * @author [mybatis plus generator]
 * @since 2024-04-25
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName(value = "t_transfer_subject", autoResultMap = true)
public class TransferSubjectEntity extends TransferSubject {

    private static final long serialVersionUID = 1L;

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

    /**
     * ID
     */
    @TableId(value = "id")
    private String id;

    /**
     * 下游回调链接
     */
    private String notifyUrl;

    /**
     * 下游申请单号
     */
    private String transSubApplyId;

    /**
     * 转账主体申请单号
     */
    private String transApplyId;

    /**
     * 渠道申请单号
     */
    private String transChannelApplyNo;

    /**
     * 渠道签约ID
     */
    private String transChannelSignNo;

    /**
     * 通道主体编号
     */
    private String transChannelMchNo;

    /**
     * 主体类型.FQ: 发起方; JS: 接收方; ALL: 可发起, 可接收
     */
    private String subjectType;

    /**
     * 应用ID
     */
    private String appId;

    /**
     * 所属账号类型
     */
    private String infoType;

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

    /**
     * 渠道商号
     */
    @NotEmpty(message = "渠道商号不能为空", groups = {Add.class})
    private String isvNo;

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

    /**
     * 顶级代理商号
     */
    private String topAgentNo;

    /**
     * 转账接口代码
     */
    @NotEmpty(message = "转账接口代码不能为空", groups = {Add.class})
    private String transIfCode;

    /**
     * 主体名称
     */
    private String subjectName;

    /**
     * 转账接口实例ID
     */
    private Integer transInterfaceId;

    /**
     * 商户进件号，部分通道需要关联商户
     */
    private String mchApplyId;

    /**
     * 关联的支付接口代码
     */
    private String payIfCode;

    /**
     * 商户进件详细消息（JSON类型）
     */
    @TableField(typeHandler = EncryptTypeHandler.class)
    private String applyDetailInfo;

    /**
     * 响应提示信息（一般进件异常或提示信息）
     */
    private String applyErrorInfo;

    /**
     * 状态: 0-停用, 1-启用
     */
    private Byte state;

    /**
     * 佣金结算周期（仅服务商配置， 用于代理商的佣金提现周期）
     */
    private Integer settHoldDay;

    /**
     * 进件成功接口返回参数, 用于配置到商户侧的参数信息
     */
    private String succResParameter;

    /**
     * 渠道拓展参数1
     */
    private String channelVar1;

    /**
     * 渠道拓展参数2
     */
    private String channelVar2;


    /**
     * 账户号码, 存数据库时加密, 做查询条件时以加密串对比
     */
    @TableField(typeHandler = EncryptTypeHandler.class)
    private String account;

    /**
     * 账户名称, 存数据库时加密, 做查询条件时以加密串对比
     */
    @TableField(typeHandler = EncryptTypeHandler.class)
    private String accountName;

    /**
     * @see com.jeequan.jeepay.core.model.tranfer.TransferBasicInfo#ENTRY_TYPE_BANK
     * @see com.jeequan.jeepay.core.model.tranfer.TransferBasicInfo#ENTRY_TYPE_WX
     * @see com.jeequan.jeepay.core.model.tranfer.TransferBasicInfo#ENTRY_TYPE_ZFB
     *
     * WX：微信；ZFB：支付宝；BANK：银行卡
     */
    private String entryType;

    /**
     * @see com.jeequan.jeepay.core.model.tranfer.TransferBasicInfo#ACCOUNT_TYPE_COR
     * @see com.jeequan.jeepay.core.model.tranfer.TransferBasicInfo#ACCOUNT_TYPE_PRI
     * 账户类型 B: 对公，企业；C：对私，个人
     */
    private String accountType;


    /**
     * 签约状态0：已签约；1：审核中；2：未签约；3:已解约4:解约中;5:暂存;6:暂停 ;7；未知
     */
    private Integer signState;

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

    /**
     * 账户信息 json
     */
    private String accountMessage;

    /**
     * 联系人姓名
     */
    private String realName;


    /**
     * 联系电话
     */
    private String contactTel;

//    /**
//     * 支付宝每日下发额度
//     */
//    private Long zfbDayMax;
//
//    /**
//     * 银行卡每日下发额度
//     */
//    private Long bankCardDayMax;

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

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

    /**
     * 更新者用户ID
     */
    private Long updatedUid;

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

    /**
     * 最后一次请求上游时间
     */
    private Date lastApplyAt;

    /**
     * 金额
     */
    @TableField(exist = false)
    private String transAmount;

    /**
     * 转账备注
     */
    @TableField(exist = false)
    private String transferDesc;

    /**
     * 批次号
     */
    @TableField(exist = false)
    private String batchId;

    @TableField(exist = false)
    private Long accountBookBalance;

    @TableField(exist = false)
    private String transIfParams;

    @TableField(exist = false)
    private String totalAmount;

    @TableField(exist = false)
    private Integer amountNumber;

    @TableField(exist = false)
    private String extResponse;

    @TableField(exist = false)
    private String extCardInfo;

    @TableField(exist = false)
    private JSONObject extCardInfoJson;

    /**
     * （总）到支付宝月限额(分)
     */
    @TableField(exist = false)
    private Long zfbMonthMax;

    /**
     * （总）到支付宝日限额(分)
     */
    @TableField(exist = false)
    private Long zfbDayMax;

    /**
     * （总）个人支付宝单笔限额(分)
     */
    @TableField(exist = false)
    private Long zfbPriOnceMax;

    /**
     * （总）企业支付宝单笔限额(分)
     */
    @TableField(exist = false)
    private Long zfbCorOnceMax;

    /**
     * （总）到微信月限额(分)
     */
    @TableField(exist = false)
    private Long wxMonthMax;

    /**
     * （总）到微信日限额(分)
     */
    @TableField(exist = false)
    private Long wxDayMax;

    /**
     * （总）个人微信单笔限额(分)
     */
    @TableField(exist = false)
    private Long wxPriOnceMax;

    /**
     * （总）企业微信单笔限额(分)
     */
    @TableField(exist = false)
    private Long wxCorOnceMax;

    /**
     * （总）到银行卡月限额(分)
     */
    @TableField(exist = false)
    private Long bankCardMonthMax;

    /**
     * （总）到银行卡日限额(分)
     */
    @TableField(exist = false)
    private Long bankCardDayMax;

    /**
     * （总）到对私银行卡单笔限额(分)
     */
    @TableField(exist = false)
    private Long bankCardPriOnceMax;

    /**
     * （总）到对公银行卡单笔限额(分)
     */
    @TableField(exist = false)
    private Long bankCardCorOnceMax;
    @TableField(exist = false)
    private Date firstDate;

    @TableField(exist = false)
    private Date lastDate;

    //用户名称
    @TableField(exist = false)
    private String mchUserName;

    //用户联系电话
    @TableField(exist = false)
    private String mchUserTel;

    //服务商名称
    @TableField(exist = false)
    private String agentName;

    //商户名称
    @TableField(exist = false)
    private String mchName;

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