package tiktok_api

import (
	"net/url"
	"time"
)

type CallbackResponse struct {
	Code int    `json:"code"`
	Msg  string `json:"msg"`
}

// PublicOrderCallback 抖店创建订单回调
type PublicOrderCallback struct {
	Tag   string `json:"tag"`   // 消息种类，订单创建消息的tag值为"100"
	MsgId string `json:"msgId"` //消息记录id
}

type OrderCallback struct {
	Tag      string `json:"tag"`    // 消息种类，订单创建消息的tag值为"100"
	MsgId    string `json:"msg_id"` // 消息记录id
	Data     string `json:"data"`   // 消息正文
	FormData url.Values
}

//#region 创建订单消息通知

// 创建订单回调
type CreateOrderCallback struct {
	PublicOrderCallback
	Data *CreateOrderData `json:"data"`
}

type CreateOrderData struct {
	Biz         int64   `json:"biz"`          // 业务来源 1-鲁班.....
	CreateTime  int64   `json:"create_time"`  // 订单创建时间
	OrderStatus int64   `json:"order_status"` // 父订单状态，订单创建消息的order_status值为"1"
	OrderType   int64   `json:"order_type"`   // 0: 实物 2: 普通虚拟 4: poi核销 5: 三方核销 6: 服务市场
	PId         int64   `json:"p_id"`         // 父订单 ID
	SIds        []int64 `json:"s_ids"`        // 子订单ID列表
	ShopId      int64   `json:"shop_id"`      // 店铺ID
}

//#endregion

//region 订单支付回调通知

type PayOrderCallback struct {
	PublicOrderCallback
	Data *PayOrderData `json:"data"`
}

type PayOrderData struct {
	Biz         int64   `json:"biz"`          // 订单业务类型
	OrderStatus int64   `json:"order_status"` // 父订单状态，订单支付消息的status值为"2"
	OrderType   int64   `json:"order_type"`   // 订单类型： 0: 实物 2: 普通虚拟 4: poi核销 5: 三方核销 6: 服务市场
	PId         int64   `json:"p_id"`         // 父订单ID
	PayAmount   int64   `json:"pay_amount"`   // 订单实付金额
	PayTime     int64   `json:"pay_time"`     // 1: 在线订单支付时间 2: 货到付款订单确认时间
	PayType     int64   `json:"pay_type"`     // 订单支付方式： 0：货到付款，1：微信，2：支付宝，4：银行卡，5：抖音零钱，7：无需支付，8：DOU分期，9：新卡支付，12：先用后付，13：组合支付
	SIds        []int64 `json:"s_ids"`        // 子订单ID列表
	ShopId      int64   `json:"shop_id"`      // 店铺ID
}

//#endregion

//region 订单支付待处理(风控,审核,未成团...)

type WaitOrderCallback struct {
	PublicOrderCallback
	Data *WaitOrderData `json:"data"`
}

type WaitOrderData struct {
	Biz         int64   `json:"biz"`          // 订单业务类型
	OrderStatus int64   `json:"order_status"` // 父订单状态，订单支付消息的status值为"2"
	OrderType   int64   `json:"order_type"`   // 订单类型： 0: 实物 2: 普通虚拟 4: poi核销 5: 三方核销 6: 服务市场
	PId         int64   `json:"p_id"`         // 父订单ID
	PayAmount   int64   `json:"pay_amount"`   // 订单实付金额
	PayTime     int64   `json:"pay_time"`     // 1: 在线订单支付时间 2: 货到付款订单确认时间
	PayType     int64   `json:"pay_type"`     // 订单支付方式： 0：货到付款，1：微信，2：支付宝，4：银行卡，5：抖音零钱，7：无需支付，8：DOU分期，9：新卡支付，12：先用后付，13：组合支付
	SIds        []int64 `json:"s_ids"`        // 子订单ID列表
	ShopId      int64   `json:"shop_id"`      // 店铺ID
}

//#endregion

//#region 卖家部分发货

type SomeSendOrderCallback struct {
	PublicOrderCallback
	Data *SomeSendOrderData `json:"data"`
}
type SomeSendOrderData struct {
	Biz          int64 `json:"biz"` // 订单业务来源类型
	LogisticsMsg struct {
		ExpressCompanyId string `json:"express_company_id"` // 发货快递公司
		LogisticsCode    string `json:"logistics_code"`     // 发货物流code
		PackId           string `json:"pack_id"`            // 包裹id
		ShippedOrderInfo []struct {
			ProductId      int64 `json:"product_id"`       // 商品id
			ShippedNum     int64 `json:"shipped_num"`      // 发货数量
			ShippedOrderId int64 `json:"shipped_order_id"` // 已发货子订单
			SkuId          int64 `json:"sku_id"`           // 对应skuid
			SkuNum         int64 `json:"sku_num"`          // 购买sku数量
		} `json:"shipped_order_info"`
	} `json:"logistics_msg"`
	OrderStatus int64 `json:"order_status"` // 父订单状态，卖家发货消息的status值为"2"
	OrderType   int64 `json:"order_type"`   // 订单类型
	PId         int64 `json:"p_id"`         // 父订单id
	ReceiverMsg struct {
		Addr string `json:"addr"` // 收货地址
		Name string `json:"name"` // 收货名字
		Tel  string `json:"tel"`  // 收货电话
	} `json:"receiver_msg"`
	SIds       []int64 `json:"s_ids"`       // 子订单ID列表
	ShopId     int64   `json:"shop_id"`     // 门店id
	UpdateTime int64   `json:"update_time"` // 更新时间
}

//#endregion

//#region卖家发货

type BusinessDeliveryCallback struct {
	PublicOrderCallback
	data *BusinessDeliveryData `json:"data"`
}

type BusinessDeliveryData struct {
	Biz          int64 `json:"biz"`
	LogisticsMsg struct {
		ExpressCompanyId string `json:"express_company_id"` // 发货快递公司
		LogisticsCode    string `json:"logistics_code"`     //发货物流单号
	} `json:"logistics_msg"`
	OrderStatus int64 `json:"order_status"` //父订单状态，卖家发货消息的status值为"3"
	OrderType   int64 `json:"order_type"`   // 订单类型
	PId         int64 `json:"p_id"`
	ReceiverMsg struct {
		Addr string `json:"addr"`
		Name string `json:"name"`
		Tel  string `json:"tel"`
	} `json:"receiver_msg"`
	SIds       []int64 `json:"s_ids"`
	ShopId     int64   `json:"shop_id"`
	UpdateTime int64   `json:"update_time"`
}

//#endregion

//#region 取消订单

type CancelOrderCallback struct {
	PublicOrderCallback
	Data *CreateOrderData `json:"data"`
}

type CancelOrderData struct {
	Biz          int64   `json:"biz"`
	CancelReason string  `json:"cancel_reason"` // 取消原因
	CancelTime   int64   `json:"cancel_time"`   // 取消时间
	OrderStatus  int64   `json:"order_status"`  // 父订单状态，订单取消消息的status值为"4"
	OrderType    int64   `json:"order_type"`    // 订单类型
	PId          int64   `json:"p_id"`
	SIds         []int64 `json:"s_ids"`
	ShopId       int64   `json:"shop_id"`
}

//#endregion

//#region 卖家确认收货时,会自动完成

type SuccessOrderCallback struct {
	PublicOrderCallback
	Data *SuccessOrderData `json:"data"`
}
type SuccessOrderData struct {
	Biz          int64   `json:"biz"`
	CompleteTime int64   `json:"complete_time"` // 交易完成时间
	OrderStatus  int64   `json:"order_status"`  // 父订单状态，交易完成消息的status值为"5"
	OrderType    int64   `json:"order_type"`
	PId          int64   `json:"p_id"`
	SIds         []int64 `json:"s_ids"`
	ShopId       int64   `json:"shop_id"`
}

//#endregion

//#region 发货物流消息便跟

type WayBillChangeCallback struct {
	PublicOrderCallback
	Data *WayBillChangeData `json:"data"`
}

type WayBillChangeData struct {
	Biz          int64 `json:"biz"`
	LogisticsMsg struct {
		ExpressCompanyId string `json:"express_company_id"` // 物流公司id
		LogisticsCode    string `json:"logistics_code"`     // 订单号
	} `json:"logistics_msg"`
	OrderStatus int64 `json:"order_status"` // 父订单状态-3变更物流
	OrderType   int64 `json:"order_type"`   // 订单类型
	PId         int64 `json:"p_id"`         // 订单id
	ReceiverMsg struct {
		Addr string `json:"addr"` // 收货地址
		Name string `json:"name"` // 收货名称
		Tel  string `json:"tel"`  // 电话
	} `json:"receiver_msg"`
	SIds       []int64 `json:"s_ids"`       // 子id
	ShopId     int64   `json:"shop_id"`     // 门店id
	UpdateTime int64   `json:"update_time"` // 更新时间
}

//#endregion

//#region 收货地址消息变更(商家审核通过触发)

type ReceivingAddressChangeCallback struct {
	PublicOrderCallback
	Data *ReceivingAddressChangeData `json:"data"`
}

type ReceivingAddressChangeData struct {
	OrderStatus int64 `json:"order_status"` // 收货地址变更状态为2
	OrderType   int64 `json:"order_type"`
	PId         int64 `json:"p_id"`
	ReceiverMsg struct {
		Addr string `json:"addr"`
		Name string `json:"name"`
		Tel  string `json:"tel"`
	} `json:"receiver_msg"`
	SIds       []int64 `json:"s_ids"`
	ShopId     int64   `json:"shop_id"`
	UpdateTime int64   `json:"update_time"`
}

//#endregion

//#region 卖家修改订单/运单金额回调

type UpdateAmountChangeCallback struct {
	PublicOrderCallback
	Data *UpdateAmountChangeData `json:"data"`
}

type UpdateAmountChangeData struct {
	Biz         int64   `json:"biz"`
	ModifyTime  int64   `json:"modify_time"`  // 订单修改时间
	OrderStatus int64   `json:"order_status"` // 订单状态 1
	OrderType   int64   `json:"order_type"`
	PId         int64   `json:"p_id"`
	PostAmount  int64   `json:"post_amount"` // 邮费
	SIds        []int64 `json:"s_ids"`
	ShopId      int64   `json:"shop_id"`
	TotalAmount int64   `json:"total_amount"` // 主订单金额不含邮费
}

//#endregion

//#region 买家收货消息变更(手机,地址,姓名),用户C端修改触发(需要上面审核接口)

type BuyerUpdateWayBillCallback struct {
	PublicOrderCallback
	Data *BuyerUpdateWayBillData `json:"data"`
}

type BuyerUpdateWayBillData struct {
	ApplyTime       int64 `json:"apply_time"` // 申请时间
	PId             int64 `json:"p_id"`
	PostReceiverMsg struct {
		Addr string `json:"addr"`
		Name string `json:"name"`
		Tel  string `json:"tel"`
	} `json:"post_receiver_msg"` // 变更前地址信息
	ReceiverMsg struct {
		Addr string `json:"addr"`
		Name string `json:"name"`
		Tel  string `json:"tel"`
	} `json:"receiver_msg"` // 变更后地址信息
	ShopId int64 `json:"shop_id"`
}

//#endregion

//#region商家修改交易备注回调

type BusinessUpdateRemakeCallback struct {
	PublicOrderCallback
	Data *BusinessUpdateRemakeData `json:"data"`
}
type BusinessUpdateRemakeData struct {
	PId        int64  `json:"p_id"`        // 订单
	Remark     string `json:"remark"`      // 备注
	ShopId     int64  `json:"shop_id"`     // 门店id
	Star       int64  `json:"star"`        // 标星等级，范围0～5，0为灰色旗标，5为红色旗标，数字越大颜色越深 0灰 1紫 2青 3绿 4橙 5红
	UpdateTime int64  `json:"update_time"` // 修改时间
}

//#endregion

//#region 订单发货时消息变更回调

type AppointmentChangeCallback struct {
	PublicOrderCallback
	Data *AppointmentChangeData `json:"data"`
}

type AppointmentChangeData struct {
	ExpDeliveryTime int64   `json:"exp_delivery_time"` // 变更后预期发货时间
	OrderType       int64   `json:"order_type"`
	PId             string  `json:"p_id"`
	SIds            []int64 `json:"s_ids"`
	ShopId          int64   `json:"shop_id"`
}

//#endregion

//#region 当买家取消申请或系统超时机制导致退款取消时，会推送此消息

type UserCancelRefundOrderCallback struct {
	PublicOrderCallback
	Data *UserCancelRefundOrderData `json:"data"`
}

type UserCancelRefundOrderData struct {
	AftersaleId      int64     `json:"aftersale_id"`       // 售后单ID
	AftersaleStatus  int       `json:"aftersale_status"`   // 售后状态：6-售后申请；27-拒绝售后申请；12-售后成功；7-售后退货中；11-售后已发货；29-售后退货拒绝；13-【换货返回：换货售后换货商家发货】，【补寄返回：补寄待用户收货】； 14-【换货返回：（换货）售后换货用户收货】，【补寄返回：（补寄）用户已收货】 ；28-售后失败；51-订单取消成功；53-逆向交易已完成；
	AftersaleType    int       `json:"aftersale_type"`     // 售后类型： 0: 退货 1: 售后仅退款 2: 发货前整单退款
	CloseTime        int       `json:"close_time"`         // 退款成功时间
	PId              int64     `json:"p_id"`               // 父订单ID
	ReasonCode       int       `json:"reason_code"`        // 原因码
	RefundAmount     int       `json:"refund_amount"`      // 申请退款的金额（含运费）
	RefundPostAmount int       `json:"refund_post_amount"` // 申请退的运费金额
	RefundVoucherNum int       `json:"refund_voucher_num"` // 申请退款的卡券的数量
	SId              int64     `json:"s_id"`               // 子订单ID
	ShopId           int       `json:"shop_id"`            // 店铺ID
	UpdateTime       time.Time `json:"update_time"`        // 售后单更新时间
}

//#endregion

//#region 假的拣货完成
type FakePickUpGoodsCallback struct {
	PublicOrderCallback
}
type FakePickUpGoodsData struct {
	PId          string `json:"p_id"`
	VendorStatus string `json:"vendor_status"`
	Cmd          string `json:"cmd"`
	ShopId       int64  `json:"shop_id"`
}

//#endregion

/*******************************退款退货回调消息**********************************************/

//#region 买家发起售后申请消息

type BuyerRefundCreatedCallback struct {
	PublicOrderCallback
	Data *BuyerRefundCreatedData `json:"data"`
}

type BuyerRefundCreatedData struct {
	AftersaleId      int64     `json:"aftersale_id"`
	AftersaleStatus  int       `json:"aftersale_status"`
	AftersaleType    int       `json:"aftersale_type"`
	ApplyTime        int       `json:"apply_time"`
	PId              int64     `json:"p_id"`
	ReasonCode       int       `json:"reason_code"`
	RefundAmount     int       `json:"refund_amount"`
	RefundPostAmount int       `json:"refund_post_amount"`
	RefundVoucherNum int       `json:"refund_voucher_num"`
	SId              int64     `json:"s_id"`
	ShopId           int       `json:"shop_id"`
	UpdateTime       time.Time `json:"update_time"`
}

//#endregion

//#region 买家修改售后申请消息

type BuyerRefundModifiedCallBack struct {
	PublicOrderCallback
	Data *BuyerRefundModifiedData `json:"data"`
}
type BuyerRefundModifiedData struct {
	AftersaleId      int64     `json:"aftersale_id"`
	AftersaleStatus  int       `json:"aftersale_status"`
	AftersaleType    int       `json:"aftersale_type"`
	ModifyTime       int       `json:"modify_time"`
	PId              int64     `json:"p_id"`
	ReasonCode       int       `json:"reason_code"`
	RefundAmount     int       `json:"refund_amount"`
	RefundPostAmount int       `json:"refund_post_amount"`
	RefundVoucherNum int       `json:"refund_voucher_num"`
	SId              int64     `json:"s_id"`
	ShopId           int       `json:"shop_id"`
	UpdateTime       time.Time `json:"update_time"`
}

//#endregion

//#region 退款成功消息

type BusinessRefundSuccessCallback struct {
	PublicOrderCallback
	Data *BusinessRefundSuccessData `json:"data"`
}

type BusinessRefundSuccessData struct {
	AftersaleId      int64     `json:"aftersale_id"`
	AftersaleStatus  int64     `json:"aftersale_status"`
	AftersaleType    int64     `json:"aftersale_type"`
	PId              int64     `json:"p_id"`
	ReasonCode       int64     `json:"reason_code"`
	RefundAmount     int64     `json:"refund_amount"`
	RefundPostAmount int64     `json:"refund_post_amount"`
	RefundVoucherNum int64     `json:"refund_voucher_num"`
	SId              int64     `json:"s_id"`
	ShopId           int64     `json:"shop_id"`
	SuccessTime      int64     `json:"success_time"`
	UpdateTime       time.Time `json:"update_time"`
}

//#endregion

//#region 拒绝退货申请消息

type BusinessNotReturnApplyRefusedCallBack struct {
	PublicOrderCallback
	Data *BusinessNotReturnApplyRefusedData `json:"data"`
}
type BusinessNotReturnApplyRefusedData struct {
	AftersaleId      int64     `json:"aftersale_id"`
	AftersaleStatus  int       `json:"aftersale_status"`
	AftersaleType    int       `json:"aftersale_type"`
	PId              int64     `json:"p_id"`
	ReasonCode       int       `json:"reason_code"`
	RefundAmount     int       `json:"refund_amount"`
	RefundPostAmount int       `json:"refund_post_amount"`
	RefundVoucherNum int       `json:"refund_voucher_num"`
	RefuseTime       int       `json:"refuse_time"`
	SId              int64     `json:"s_id"`
	ShopId           int       `json:"shop_id"`
	UpdateTime       time.Time `json:"update_time"`
}

//#endregion

//#region 拒绝退款消息

type BusinessNotRefundRefusedCallBack struct {
	PublicOrderCallback
	Data *BusinessNotRefundRefusedData `json:"data"`
}

type BusinessNotRefundRefusedData struct {
	AftersaleId      int64     `json:"aftersale_id"`
	AftersaleStatus  int       `json:"aftersale_status"`
	AftersaleType    int       `json:"aftersale_type"`
	PId              int64     `json:"p_id"`
	ReasonCode       int       `json:"reason_code"`
	RefundAmount     int       `json:"refund_amount"`
	RefundPostAmount int       `json:"refund_post_amount"`
	RefundVoucherNum int       `json:"refund_voucher_num"`
	RefuseTime       int       `json:"refuse_time"`
	SId              int64     `json:"s_id"`
	ShopId           int       `json:"shop_id"`
	UpdateTime       time.Time `json:"update_time"`
}

//#endregion

//#region 卖家同意退货申请消息

type BusinessReturnApplyAgreedCallback struct {
	PublicOrderCallback
	Data *BusinessReturnApplyAgreedData `json:"data"`
}
type BusinessReturnApplyAgreedData struct {
	Addr             string    `json:"addr"`               // 退货地址
	AftersaleId      int64     `json:"aftersale_id"`       // 售后单ID
	AftersaleStatus  int       `json:"aftersale_status"`   // 售后状态
	AftersaleType    int       `json:"aftersale_type"`     // 售后类型
	AgreeTime        int       `json:"agree_time"`         // 同意时间
	PId              int64     `json:"p_id"`               // 父id
	ReasonCode       int       `json:"reason_code"`        // 申请码
	RefundAmount     int       `json:"refund_amount"`      // 申请退款的金额（含运费）
	RefundPostAmount int       `json:"refund_post_amount"` // 申请退的运费金额
	RefundVoucherNum int       `json:"refund_voucher_num"` // 申请退款的卡券的数量
	SId              int64     `json:"s_id"`               // 子订单ID
	ShopId           int       `json:"shop_id"`            // 店铺ID
	UpdateTime       time.Time `json:"update_time"`        // 售后单更新时间
}

//#endregion

//#region 卖家同意退款回调

type BusinessRefundAgreedCallback struct {
	PublicOrderCallback
	Data *BusinessRefundAgreedData `json:"data"`
}

type BusinessRefundAgreedData struct {
	AftersaleId      int64     `json:"aftersale_id"`       // 售后单ID
	AftersaleStatus  int       `json:"aftersale_status"`   // 售后状态码，枚举值如下
	AftersaleType    int       `json:"aftersale_type"`     // 售后类型： 0: 退货 1: 售后仅退款 2: 发货前退款 3：换货
	AgreeTime        int       `json:"agree_time"`         // 同意退款时间
	PId              int64     `json:"p_id"`               // 父订单ID
	ReasonCode       int       `json:"reason_code"`        // 申请售后原因码，枚举值如下
	RefundAmount     int       `json:"refund_amount"`      // 申请退款的金额（含运费）
	RefundPostAmount int       `json:"refund_post_amount"` // 申请退的运费金额
	RefundVoucherNum int       `json:"refund_voucher_num"` // 申请退款的卡券的数量
	SId              int64     `json:"s_id"`               // 子订单ID
	ShopId           int       `json:"shop_id"`            // 店铺ID
	UpdateTime       time.Time `json:"update_time"`        // 售后单更新时间
}

//#endregion
