package pay

import "fusenapi/constants"

type Config struct {
	// stripe支付
	Stripe Stripe
}

// NewPayDriver 实例化方法
func NewPayDriver(PayMethod int64, config *Config) Pay {
	switch PayMethod {
	case int64(constants.PAYMETHOD_STRIPE):
		return &Stripe{Key: config.Stripe.Key}
	default:
		return &Stripe{Key: config.Stripe.Key}
	}

}

// Pay 支付集成接口
type Pay interface {

	// 支付预处理
	GeneratePrepayment(req *GeneratePrepaymentReq) (res *GeneratePrepaymentRes, err error)

	// 支付退款申请
	PayRefund(req *PayRefundReq) (res *PayRefundRes, err error)
}

type GeneratePrepaymentReq struct {
	OrderSn            string    `json:"order_sn"`            // 订单编号
	Amount             int64     `json:"amount"`              // 支付金额
	Currency           string    `json:"currency"`            // 支付货币
	ProductName        string    `json:"product_name"`        // 商品名称
	ProductDescription string    `json:"product_description"` // 商品描述
	ProductImages      []*string `json:"product_imageso"`     // 商品照片
	Quantity           int64     `json:"quantity"`            //数量
	SuccessURL         string    `json:"success_url"`         // 支付成功回调
	CancelURL          string    `json:"cancel_url"`          // 支付取消回调
}

type GeneratePrepaymentRes struct {
	URL          string `json:"url"`          // 支付重定向地址
	TradeNo      string `json:"trade_no"`     //交易ID
	ClientSecret string `json:"clientSecret"` //交易密钥
	SessionId    string `json:"session_id"`   //SessionId
}

type PayRefundReq struct {
	TradeNo string `json:"trade_no"` // 交易编号
}

type PayRefundRes struct {
}