package tiktok

import (
	"errors"
	"git.rosy.net.cn/baseapi/utils"
)

// 抖音退款流程
type RefundOrderReq struct {
	AppID        string `json:"app_id"`        // 小程序APPID
	OutOrderNo   string `json:"out_order_no"`  // 商户分配支付单号，标识进行退款的订单
	OutRefundNo  string `json:"out_refund_no"` // 商户分配退款号，保证在商户中唯一
	Reason       string `json:"reason"`        // 退款原因
	RefundAmount int    `json:"refund_amount"` // 退款金额，单位[分]
	Sign         string `json:"sign"`          // 签名，详见
	CpExtra      string `json:"cp_extra"`      // 开发者自定义字段，回调原样回传
	NotifyURL    string `json:"notify_url"`    // 商户自定义回调地址
}

// 返回值
type RefundOrderRes struct {
	ErrNo    int64  `json:"err_no"`    // 错误码
	ErrTips  string `json:"err_tips"`  // 详情
	RefundNo string `json:"refund_no"` // 担保交易服务端退款单号
}

// 抖音退款
func (a *API) RefundOrderTT(param *RefundOrderReq) (string, error) {
	param.Sign = a.Sign(utils.Struct2FlatMap(param))
	data, err := a.AccessAPI2(RefundUrl, utils.Struct2FlatMap(param))
	if err != nil {
		return "", err
	}

	result := &RefundOrderRes{}
	if err := utils.Map2StructByJson(data, result, false); err != nil {
		return "", err
	}
	if result.ErrNo != 0 {
		return "", errors.New(result.ErrTips)
	}
	return result.RefundNo, nil
}

// 查询退款结果
func (a *API) QueryRefundMsg() (map[string]interface{}, error) {
	param := map[string]interface{}{"app_id": a.GetAppID(), "out_refund_no": "7105943473253206285"}
	param["sign"] = a.Sign(param)
	data, err := a.AccessAPI2(QueryRefundUrl, param)
	if err != nil {
		return nil, err
	}

	return data, err
}
