// 委托

package unionpay

import (
	"encoding/json"
	"fmt"
)

// EntrustEstablish 建立委托
func EntrustEstablish(mi *MerchantInfo, oi OrderInfo, ci CustomerInfo) (res ReqRespose, err error) {
	/*
			var (
				accNo     []byte
				encrypted []byte
				signature []byte
				values    = &url.Values{}
				args      = make(map[string]string)
			)

			args["version"] = "5.1.0"                 // 版本号
			args["encoding"] = "utf-8"                // 编码方式
			args["signMethod"] = "01"                 // 签名方法
			args["txnType"] = "72"                    // 交易类型
			args["txnSubType"] = "11"                 // 交易子类
			args["bizType"] = "000501"                // 业务类型
			args["accessType"] = "0"                  // 接入类型
			args["channelType"] = "07"                // 渠道类型
			args["encryptCertId"] = mi.SerialNumber() // 验签证书序列号
			args["certId"] = mi.SerialNumber()        // 证书序列号
			args["merId"] = mi.MerID                  // 商户代码
			args["orderId"] = oi.OrderID              // 商户订单号,8-32位数字字母,不能含“-”或“_”
			args["txnTime"] = oi.TxnTime              // 订单发送时间,格式为YYYYMMDDhhmmss,取北京时间

			accNo, err = mi.Encrypt([]byte(ci.CardNo))
			if err != nil {
				return
			}
			args["accNo"] = base64Encode(accNo)

			encrypted, err = mi.EncryptCustomerInfo(ci)
			if err != nil {
				return
			}
			args["customerInfo"] = ci.String(encrypted)

			signature, err = mi.Sign([]byte(createLinkString(args, true, false)))
			if err != nil {
				return
			}
			args["signature"] = base64Encode(signature) // 签名

			for k, v := range args {
				values.Add(k, v)
			}
			res, err = post(BaseHost+ReqBackTrans, []byte(values.Encode()))
		if err != nil {
			return
		}
			// */

	var body string
	args := newParams(oi, ci)
	args.BizType = "000501" // 业务类型 代收产品

	args.TxnType = "72"    // 交易类型 取值:72
	args.TxnSubType = "11" // 交易子类, 11 建立委托关系
	body, err = args.ToBody(mi, ci)
	if err != nil {
		return
	}
	res, err = post(BaseHost+ReqBackTrans, []byte(body))
	if err != nil {
		return
	}
	_, err = res.Ok()
	bs, _ := json.Marshal(res)
	fmt.Println(string(bs))
	return
}