package _interface

import (
	"context"
)

const (
	AfterServiceCanApplyTrue  = 1 // 可申请
	AfterServiceCanApplyFalse = 2 // 不可申请

	AfterServiceNeedPictureTrue  = 1 // 需要上传
	AfterServiceNeedPictureFalse = 2 // 不需要上传

	AfterServiceZipCodeNone = "000000"
)

type AfterServiceInterface interface {
	// Can 获取是否可发起售后
	Can(ctx context.Context, args ArgsAfterServiceCan, reply *ReplyAfterServiceCan) error
	// Reason 获取售后原因
	Reason(ctx context.Context, args ArgsAfterServiceReason, reply *[]ReplyAfterServiceReason) error
	// Apply @Title 发起售后
	Apply(ctx context.Context, args ArgsAfterServiceApply, sourceAfsSn *string) error
	// LogisticsAddress @Title 寄回地址
	LogisticsAddress(ctx context.Context, afterServiceSn string, reply *ReplyAfterServiceLogisticsAddress) error
	// BackLogisticsBill @Title 回传物流信息
	BackLogisticsBill(ctx context.Context, args ArgsAfterServiceBackLogisticsBill, reply *int) error
	// Cancel @Title 取消售后
	Cancel(ctx context.Context, afterServiceSn string, reply *int) error
}
type ArgsAfterServiceCan struct {
	OrderSn string // 订单编号
	SkuId   string // skuId
}
type ReplyAfterServiceCan struct {
	CanApply       uint               `json:"canApply"`       // 是否可申请售后 1=可申请 2=不可申请
	SkuId          string             `json:"skuId"`          // skuId
	AppliedNum     uint               `json:"appliedNum"`     // 已申请售后商品数量
	CannotApplyTip string             `json:"cannotApplyTip"` // 不可申请原因
	Types          []AfterServiceType `json:"types"`
}
type AfterServiceType struct {
	TypeId   string `json:"type"`     // 类型
	TypeName string `json:"typeName"` // 类型名称
}

type ArgsAfterServiceReason struct {
	OrderSn string // 订单编号
	SkuId   string // skuId
	TypeId  string // 售后类型
}
type ReplyAfterServiceReason struct {
	ReasonCode  string `json:"reasonCode"`  // 售后原因编码
	ReasonName  string `json:"reasonName"`  // 售后原因描述
	NeedPicture uint   `json:"needPicture"` // 是否需要上传图片 1=需要上传 2=不需要上传
}

type ArgsAfterServiceApply struct {
	TypeId     string   // 售后类型
	TypeName   string   // 售后名称
	ReasonCode string   // 售后原因编码
	ReasonName string   // 售后原因描述
	AfsSn      string   // 渠道售后单号
	OrderSn    string   // 订单编号
	SkuId      string   // skuId
	Pictures   []string // 图片地址数组
	Quantity   uint     // 售后申请数量
}
type ReplyAfterServiceLogisticsAddress struct {
	Name    string `json:"name"`    // 姓名
	Mobile  string `json:"mobile"`  // 手机号
	ZipCode string `json:"zipCode"` // 邮编
	Address string `json:"address"` // 地址
}

type ArgsAfterServiceBackLogisticsBill struct {
	AfterServiceSn   string // 售后单号
	LogisticsCompany string // 物流公司
	WaybillCode      string // 运单号
	SendGoodsDate    int64  // 运单发货日期
}