package _interface

import (
	"context"
	"github.com/shopspring/decimal"
)

type OrderInterface interface {
	// FreightFee 获取运费
	FreightFee(ctx context.Context, args ArgsOrderFreightFee, freightFee *ReplyOrderFreightFee) error
	// Submit 下单
	Submit(ctx context.Context, args ArgsOrderSubmit, sourceOrderSn *string) error
	// LadingBill @Title 提单
	LadingBill(ctx context.Context, orderSn string, reply *int) error
	// Close @Title 关闭订单
	Close(ctx context.Context, orderSn string, reply *int) error
	// Cancel @Title 取消订单
	Cancel(ctx context.Context, args ArgsOrderCancel, reply *int) error
	// Trajectory @Title 物流轨迹
	Trajectory(ctx context.Context, orderSn string, reply *[]ReplyTrajectory) error
	// Finish @Title 确认收货
	Finish(ctx context.Context, orderSn string, reply *int) error
}
type ArgsOrderCancel struct {
	OrderSn string // 订单编号
	Reason  string // 取消原因
}
type ArgsOrderFreightFee struct {
	Skus    []OrderFreightFeeSkuItem // 商品信息
	Address string                   // 地址
}
type ReplyOrderFreightFee struct {
	FreightFee decimal.Decimal // 运费
	ErrMsg     string          // 错误信息
}

type OrderFreightFeeSkuItem struct {
	SourceSkuId    string          // 源skuId
	SourceSkuPrice decimal.Decimal // 采购价
	Quantity       uint            // 数量
}

type ArgsOrderSubmit struct {
	OrderSn    uint64                   // 订单号
	Skus       []OrderFreightFeeSkuItem // 商品信息
	Address    string                   // 地址
	FreightFee decimal.Decimal          // 运费
	Receiver   OrderReceiver            // 收件信息
	UserIp     string                   // 用户ip
}

type OrderReceiver struct {
	Name    string // 姓名
	Phone   string // 手机号
	Email   string // 邮件
	ZipCode string // 邮编
}

type ReplyTrajectory struct {
	LogisticsName string        `json:"logisticsName"`
	WaybillCode   string        `json:"waybillCode"`
	Steps         []PackageStep `json:"steps"`
}
type PackageStep struct {
	State      string `json:"state"`
	Content    string `json:"content"`
	OperatorAt int64  `json:"operatorAt"`
}