package com.jeequan.jeepay.thirdparty.channel.zftpay.model;

import cn.hutool.core.date.DateUtil;
import com.alipay.api.FileItem;
import lombok.Getter;
import lombok.Setter;

import java.io.Serializable;
import java.util.Date;

/**
 * 线上对接请求参数
 */
@Setter
@Getter
public class ReqEntity implements Serializable {

    public static final String DEFAULT_CHARSET = "UTF-8";

    public static final String DEFAULT_FORMAT = "json";

    public static final String DEFAULT_SIGN_TYPE = "RSA2";

    public static final String DEFAULT_VERSION = "1.0";

    /**
     * 支付宝分配给开发者的应用ID
     */
    private String app_id;

    /**
     * 接口名称
     */
    private String method;

    /**
     * 仅支持JSON
     */
    private String format;

    /**
     * 请求使用的编码格式，如utf-8,gbk,gb2312等
     */
    private String charset;

    /**
     * 商户生成签名字符串所使用的签名算法类型，目前支持RSA2和RSA，推荐使用RSA2
     */
    private String sign_type;

    /**
     * RSA签名字符串，再用Base64编码
     */
    private String sign;

    /**
     * 发送请求的时间，格式"yyyy-MM-dd HH:mm:ss"
     */
    private String timestamp;

    /**
     * 调用的接口版本，固定为：1.0
     */
    private String version;

    /**
     * 支付宝服务器主动通知商户服务器里指定的页面http/https路径。
     */
    private String notify_url;

    /**
     * 详见应用授权概述 https://opendocs.alipay.com/isv/10467/xldcyq
     */
    private String app_auth_token;

    /**
     * 请求参数的集合，最大长度不限，除公共参数外所有请求参数都必须放在这个参数中传递，具体参照各产品快速接入文档
     */
    private String biz_content;

    /**
     * 支付成功跳转地址
     */
    private String return_url;
    /**
     * 图片类型
     */
    private String image_type;
    /**
     * 图片内容
     */
    private FileItem image_content;

    public ReqEntity(ReqMethod method, String appid, String notifyUrl, String returnUrl) {
        this.app_id = appid;
        this.method = method.getMethod();
        this.format = DEFAULT_FORMAT;
        this.charset = DEFAULT_CHARSET;
        this.sign_type = DEFAULT_SIGN_TYPE;
        this.timestamp = DateUtil.formatDateTime(new Date());
        this.version = DEFAULT_VERSION;
        this.notify_url = notifyUrl;
        this.return_url = returnUrl;
    }

    public ReqEntity(ReqMethod method, String appid) {
        this(method,appid,null,null);
    }

    public ReqEntity(ReqMethod method, String appid, String notifyUrl) {
        this(method,appid,notifyUrl,null);
    }
}
