package market

import (
	"PaymentCenter/app/utils/encrypt"
	"PaymentCenter/config"
	"encoding/json"
	"time"
)

func NewMarketClient(cfg config.MarketConfig) *MarketClient {
	cfg.Sign = "-----BEGIN RSA PRIVATE KEY-----\n" + cfg.Sign + "\n-----END RSA PRIVATE KEY-----"
	return &MarketClient{
		cfg: cfg,
	}
}

/*
MarketSend
券码生成接口
- 请求地址:/openApi/v1/market/key/send
- 说明:发券接口应支持使用同一流水号进行重复请求,即:当调用该接口失败时,可 以使用同一流水号进行再次请求,接口需要根据请求的流水号进行判断,若无该流水 号的券码信息则新生成后返回,若有该流水号的券码信息则直接返回该券码的信息
orderNo: 订单号
VoucherId: 制码批次号
MobileNo: 11 手机号,可传空字符串
SendMsg: 是否发送短信:2- 发送 1-不发送
*/
func (this *MarketClient) MarketSend(orderNo, VoucherId, MobileNo, SendMsg string) (res MarketResponse, err error) {
	url := "/openApi/v1/market/key/send"
	request := MarketSendRequest{
		AppId:       this.cfg.AppId,
		ReqCode:     this.cfg.ReqCode,
		MemId:       this.cfg.MemId,
		PosId:       this.cfg.PosId,
		TimeTamp:    time.Now().Format("20060102150405"),
		VoucherId:   VoucherId,
		ReqSerialNo: orderNo,
		VoucherNum:  1,
		MobileNo:    MobileNo,
		SendMsg:     SendMsg,
	}

	request.Sign, err = MakeRsaSign(this.cfg.Sign, request.toMap())
	if err != nil {
		return res, err
	}

	bytes, err := json.Marshal(request)
	if err != nil {
		return res, err
	}

	data, err := this.doPost(url, bytes)
	if err != nil {
		return res, err
	}
	err = json.Unmarshal(data, &res)
	// 加密
	if len(res.Data.ShortUrl) > 0 {
		res.Data.ShortUrl = encrypt.AesEncryptCBC([]byte(res.Data.ShortUrl), []byte(this.cfg.SecretKey))
	}
	return res, err
}