package com.jeequan.jeepay.core.model;

import cn.hutool.core.util.URLUtil;
import com.alibaba.fastjson.JSONObject;
import com.jeequan.jeepay.core.service.ISysConfigService;
import com.jeequan.jeepay.core.utils.JeepayKit;
import com.jeequan.jeepay.core.utils.SpringBeansUtil;
import lombok.Data;

import java.io.Serializable;

/*
* 系统应用配置项定义Bean
*
* @author terrfly
* @date 2021/6/8 16:35
*/
@Data
public class DBApplicationConfig implements Serializable {

    /** 运营系统地址 **/
    private String mgrSiteUrl;

    /** 商户系统地址 **/
    private String mchSiteUrl;

    /** 支付网关地址 **/
    private String paySiteUrl;

    /** 服务商系统地址 **/
    private String agentSiteUrl;

    /** 会员系统地址 **/
    private String memberSiteUrl;

    /** 静态文件CDN域名 **/
    private String staticCdnHost;

    /** 生成  【收银台页面跳转地址】 **/
    public String genCashierPayUrl(String appId, String storeId){
        return getPaySiteUrl() + "/api/cashierPage" + "/" + JeepayKit.aesEncode(appId) + "/" + JeepayKit.aesEncode(storeId);
    }

    /** 生成  【web统一收银台跳转地址】 **/
    public String genWebCashierPayUrl(String payOrderId){
        return getPaySiteUrl() + "/api/webCashier" + "/" + JeepayKit.aesEncode(payOrderId);
    }

    /** 生成  【jsapi统一收银台跳转地址】 **/
    public String genUniJsapiPayUrl(Byte type, String entry, String id, String isvNo,Long amt){
        return getPaySiteUrl() + "/pages/hub/" + entry+  "/"+isvNo+"/?"+JeepayKit.TOKEN_KEY+"=" + genQrToken(type, id,amt);
    }

    /** 生成  【jsapi统一收银台跳转地址】 **/
    public String genUniJsapiPayUrl(Byte type, String entry, String id, String isvNo){
        return getPaySiteUrl() + "/pages/hub/" + entry+ "/"+isvNo+"/?"+JeepayKit.TOKEN_KEY+"=" + genQrToken(type, id,null);
    }

    /** 生成  【jsapi统一收银台】oauth2获取用户ID回调地址 **/
    public String genOauth2RedirectUrlEncode(String token){
        return URLUtil.encodeAll(getPaySiteUrl() + "/cashier/pages/oauth2/callback?"+JeepayKit.TOKEN_KEY+"=" + token);
    }

    /** 生成  【商户获取渠道用户ID接口】oauth2获取用户ID回调地址 **/
    public String genMchChannelUserIdApiOauth2RedirectUrlEncode(JSONObject param){
        return URLUtil.encodeAll(getPaySiteUrl() + "/api/channelUserId/oauth2Callback/" + JeepayKit.aesEncode(param.toJSONString()));
    }

    /** 生成  【jsapi统一收银台二维码图片地址】 **/
    public String genScanImgUrl(String url){
        return getPaySiteUrl() + "/api/scan/imgs/" + JeepayKit.aesEncode(url) + ".png";
    }

    /** 生成  【支付宝 isv子商户的授权链接地址】 **/
    public String genAlipayIsvsubMchAuthUrl(String isvNo, String mchAppId){
        return getPaySiteUrl() + "/api/channelbiz/alipay/redirectAppToAppAuth/" + isvNo + "_" + mchAppId;
    }

    /** 生成 收银台的TOKEN  **/
    public String genQrToken(Byte type, String id,Long amt){
//        if(amt == null){
//            return JeepayKit.aesEncode(String.format("{type: %s, id: '%s' }", type, id));
//        }else{
//            return JeepayKit.aesEncode(String.format("{type: %s, id: '%s',amt: %s}", type, id , amt));
//        }
        ISysConfigService sysService = SpringBeansUtil.getBean("sysConfigService", ISysConfigService.class);
        return sysService.genQrToken(type,id,amt);
    }
}
