package schl

import (
	"context"
	"github.com/gogf/gf/encoding/gjson"
	"github.com/gogf/gf/util/gconv"
)

type OrderBeforeReq struct {
	FreightPayer     int               `json:"freightPayer,omitempty"`    //运费结算方式,不传默认为预付	1:预付	4:包邮结算
	InvoiceHeaderId  int               `json:"invoiceHeaderId,omitempty"` //发票抬头id
	InvoiceType      int               `json:"invoiceType,omitempty"`     //是否需要开票,不传默认为无需开票	0:无需开票	2:开票
	Province         string            `json:"province"`                  //收件人省份
	City             string            `json:"city"`                      //收件人城市
	District         string            `json:"district"`                  //收件人地区
	ExpCode          string            `json:"expCode"`                   //快递编码
	OrderDetailsList []OrderBeforeItem `json:"orderDetailsList"`
}

type OrderBeforeItem struct {
	Code string `json:"code"` //规格编码
	Num  int    `json:"num"`  //购买数量
}

type OrderBeforeRes struct {
	Code   int    `json:"code"`
	Msg    string `json:"msg"`
	Result struct {
		Freight          float64 `json:"freight"`
		GoodsMoneyAmount float64 `json:"goodsMoneyAmount"`
		PayMoney         float64 `json:"payMoney"`
	} `json:"result"`
	TraceId string `json:"traceId"`
}

// OrderBefore 订单运费
func (s *Config) OrderBefore(ctx context.Context, req OrderBeforeReq) (res *OrderBeforeRes, err error) {

	result, err := s.Post(ctx, "/open/xdxt/api/v2/order/orderFreightPreview", gconv.Map(req))
	if err != nil {
		return
	}

	err = gjson.New(result).Scan(&res)
	return
}