package cn.pluss.platform.ryx;

import cn.pluss.platform.entity.RyxAccessModel;
import cn.pluss.platform.entity.RyxAccessResp;
import cn.pluss.platform.entity.RyxPayRequest;
import cn.pluss.platform.util.RyxConfig;
import com.alibaba.fastjson.JSONObject;
import org.springframework.core.io.ByteArrayResource;

import java.util.List;
import java.util.Map;

/**
 * @author DJH 
 * 瑞银信参数
 */
public interface RyxService {

    String IV_PARAM = "ivParam";
    String AES_KEY = "aesKey";

    String prefix = "onlpay/";

    String userName = "rscy";

    String password = "gS4*F&o51KhA";

    Integer port = 22221;

    String hostName = "119.254.93.57";

    String filePrefix = "tran_";

    String suffix = ".csv.gz";

    String unZipSuffix = ".csv";

    /**
     * 入网接口签名方法, 组合基本参数
     * @param paramMap          请求数据，需要加密的数据
     * @param files             上传的文件
     * @return 返回请求组合的数据
     * @throws Exception    AES急
     */
    RyxAccessModel accessCombineEncrypt(Map<String, Object> paramMap, List<ByteArrayResource> files, String accessId, String pubKey);

    /**
     * 入网接口请求结果方法, 解密验签处理
     * @param ryxAccessModel    请求结果
     * @param <T> 返回参数类型
     * @param clazz 返回参数类型
     * @return  返回解密的参数
     */
    <T> T accessResultDecrypt(RyxAccessModel ryxAccessModel, Class<T> clazz);

    /**
     * 进件相关通用接口
     * @param paramMap  请求参数
     * @param files     文件
     * @param accessId  机构号
     * @param pubKey    解密公钥
     * @param url       ignored
     * @return  ignored
     */
    RyxAccessResp reqCommon(Map<String, Object> paramMap, List<ByteArrayResource> files, String accessId, String pubKey, String url);

    /**
     * 进件相关通用接口 - 常规商户
     * @param paramMap  ignored
     * @param files     ignored
     * @param url       ignored
     * @return  ignored
     */
    default RyxAccessResp reqCommon(Map<String, Object> paramMap, List<ByteArrayResource> files, String url) {
        return reqCommon(paramMap, files, RyxConfig.accessId, RyxConfig.accessPubKey, url);
    }

    /**
     * 进件相关通用接口 - 商服宝插件
     * @param paramMap  ignored
     * @param files     ignored
     * @return  ignored
     */
    default RyxAccessResp reqSfbCommon(Map<String, Object> paramMap, List<ByteArrayResource> files, String url) {
        return reqCommon(paramMap, files, RyxConfig.subAccessId, RyxConfig.subAccessPubKey, url);
    }

    /**
     * 支付, 组合基本参数
     * @param params          请求数据，需要加密的数据
     * @return 返回请求组合的数据
     * @throws Exception    AES
     */
    RyxPayRequest payParamsEncrypt(JSONObject params,String payWay);


    /**
     * 解析支付返回参数
     * @param respones
     * @return
     */
    JSONObject analysisPayParamsEncrypt(String respones);

    /**
     * 封装支付通用请求参数
     * @param reqData
     * @param payWay
     * @return
     */
    JSONObject analysisCommonPayParams(String url,String payWay,JSONObject reqData);

    /**
     * 瑞银信下载ftp对账文件
     * @param  date 日期
     */
    JSONObject downloadFtpFile(String date);
}
