package v1

import (
	"kami/api/commonApi"
	"kami/internal/consts"

	"github.com/gogf/gf/v2/frame/g"
	"github.com/gogf/gf/v2/os/gtime"
)

// SubmitOrderReq 提交订单
type SubmitOrderReq struct {
	g.Meta          `path:"/jd-v2/order/submit" tags:"JD V2 Order" method:"post" summary:"提交订单"`
	Amount          float64 `json:"amount" v:"required|min:0.01#订单金额不能为空|订单金额必须大于0" description:"订单金额"`
	MerchantOrderId string  `json:"merchantOrderId" v:"required#商户订单号不能为空" description:"商户订单号"`
	Attach          string  `json:"attach" description:"附加信息"`
}

type SubmitOrderRes struct {
	OrderNo   string      `json:"orderNo" description:"系统订单号"`
	AlipayUrl string      `json:"alipayUrl" description:"支付宝支付链接"`
	Amount    float64     `json:"amount" description:"订单金额"`
	CreatedAt *gtime.Time `json:"createdAt" description:"创建时间"`
}

// ListOrderReq 订单列表查询
type ListOrderReq struct {
	g.Meta `path:"/jd-v2/order/list" tags:"JD V2 Order" method:"get" summary:"订单列表"`
	commonApi.CommonPageReq
	MerchantOrderId string                     `json:"merchantOrderId" description:"商户订单号"`
	OrderNo         string                     `json:"orderNo" description:"系统订单号"`
	AccountId       int64                      `json:"accountId" description:"账号ID"`
	Status          consts.CamelOilOrderStatus `json:"status" description:"订单状态"`
	PayStatus       consts.CamelOilPayStatus   `json:"payStatus" description:"支付状态"`
	DateRange       []*gtime.Time              `json:"dateRange" description:"时间范围"`
}

type OrderListItem struct {
	OrderNo         string                      `json:"orderNo" description:"系统订单号"`
	MerchantOrderId string                      `json:"merchantOrderId" description:"商户订单号"`
	AccountId       int64                       `json:"accountId" description:"账号ID"`
	AccountName     string                      `json:"accountName" description:"账号名称"`
	Amount          float64                     `json:"amount" description:"订单金额"`
	AlipayUrl       string                      `json:"alipayUrl" description:"支付宝支付链接"`
	CardNumber      string                      `json:"cardNumber" description:"提取的卡号"`
	CardPassword    string                      `json:"cardPassword" description:"提取的卡密"`
	Status          consts.CamelOilOrderStatus  `json:"status" description:"订单状态"`
	PayStatus       consts.CamelOilPayStatus    `json:"payStatus" description:"支付状态"`
	NotifyStatus    consts.CamelOilNotifyStatus `json:"notifyStatus" description:"回调状态"`
	NotifyCount     int                         `json:"notifyCount" description:"回调次数"`
	PaidAt          *gtime.Time                 `json:"paidAt" description:"支付完成时间"`
	LastCheckAt     *gtime.Time                 `json:"lastCheckAt" description:"最后检测支付时间"`
	FailureReason   string                      `json:"failureReason" description:"失败原因"`
	CreatedAt       *gtime.Time                 `json:"createdAt" description:"创建时间"`
	UpdatedAt       *gtime.Time                 `json:"updatedAt" description:"更新时间"`
}

type ListOrderRes struct {
	commonApi.CommonPageRes[OrderListItem]
}

// OrderDetailReq 订单详情查询
type OrderDetailReq struct {
	g.Meta  `path:"/jd-v2/order/detail" tags:"JD V2 Order" method:"get" summary:"订单详情"`
	OrderNo string `json:"orderNo" v:"required#订单号不能为空" description:"订单号"`
}

type OrderDetailRes struct {
	OrderInfo struct {
		OrderNo         string                      `json:"orderNo" description:"系统订单号"`
		MerchantOrderId string                      `json:"merchantOrderId" description:"商户订单号"`
		AccountId       int64                       `json:"accountId" description:"账号ID"`
		AccountName     string                      `json:"accountName" description:"账号名称"`
		Amount          float64                     `json:"amount" description:"订单金额"`
		AlipayUrl       string                      `json:"alipayUrl" description:"支付宝支付链接"`
		Status          consts.CamelOilOrderStatus  `json:"status" description:"订单状态"`
		PayStatus       consts.CamelOilPayStatus    `json:"payStatus" description:"支付状态"`
		NotifyStatus    consts.CamelOilNotifyStatus `json:"notifyStatus" description:"回调状态"`
		NotifyCount     int                         `json:"notifyCount" description:"回调次数"`
		PaidAt          *gtime.Time                 `json:"paidAt" description:"支付完成时间"`
		LastCheckAt     *gtime.Time                 `json:"lastCheckAt" description:"最后检测支付时间"`
		Attach          string                      `json:"attach" description:"附加信息"`
		FailureReason   string                      `json:"failureReason" description:"失败原因"`
		CreatedAt       *gtime.Time                 `json:"createdAt" description:"创建时间"`
		UpdatedAt       *gtime.Time                 `json:"updatedAt" description:"更新时间"`
	} `json:"orderInfo" description:"订单信息"`

	AccountInfo struct {
		AccountId   int64                        `json:"accountId" description:"账号ID"`
		AccountName string                       `json:"accountName" description:"账号名称"`
		Phone       string                       `json:"phone" description:"手机号（脱敦）"`
		Status      consts.CamelOilAccountStatus `json:"status" description:"状态"`
		LastUsedAt  *gtime.Time                  `json:"lastUsedAt" description:"最后使用时间"`
	} `json:"accountInfo" description:"账号信息"`
}

// OrderHistoryReq 订单历史记录查询
type OrderHistoryReq struct {
	g.Meta `path:"/jd-v2/order/history" tags:"JD V2 Order" method:"get" summary:"订单历史记录"`
	commonApi.CommonPageReq
	OrderNo string `json:"orderNo" v:"required#订单号不能为空" description:"订单号"`
}

type OrderHistoryItem struct {
	OrderNo     string                         `json:"orderNo" description:"订单号"`
	ChangeType  consts.CamelOilOrderChangeType `json:"changeType" description:"变更类型"`
	ChangeText  string                         `json:"changeText" description:"变更类型文本"`
	AccountId   int64                          `json:"accountId" description:"关联账号ID"`
	AccountName string                         `json:"accountName" description:"账号名称"`
	RawData     string                         `json:"rawData" description:"原始响应数据"`
	Remark      string                         `json:"remark" description:"备注"`
	CreatedAt   *gtime.Time                    `json:"createdAt" description:"创建时间"`
}

type OrderHistoryRes struct {
	commonApi.CommonPageRes[OrderHistoryItem]
}

// AccountOrderListReq 查询账号绑定的历史订单
type AccountOrderListReq struct {
	g.Meta `path:"/jd-v2/order/accountOrders" tags:"JD V2 Order" method:"get" summary:"账号历史订单"`
	commonApi.CommonPageReq
	AccountId int64                      `json:"accountId" v:"required#账号ID不能为空" description:"账号ID"`
	Status    consts.CamelOilOrderStatus `json:"status" description:"订单状态筛选"`
	PayStatus consts.CamelOilPayStatus   `json:"payStatus" description:"支付状态筛选"`
	DateRange []*gtime.Time              `json:"dateRange" description:"时间范围"`
}

type AccountOrderListRes struct {
	AccountInfo struct {
		AccountId   int64                        `json:"accountId" description:"账号ID"`
		AccountName string                       `json:"accountName" description:"账号名称"`
		Phone       string                       `json:"phone" description:"手机号（脱敦）"`
		Status      consts.CamelOilAccountStatus `json:"status" description:"状态"`
	} `json:"accountInfo" description:"账号基本信息"`

	OrderStats struct {
		TotalOrders   int `json:"totalOrders" description:"总订单数"`
		PaidOrders    int `json:"paidOrders" description:"已支付订单数"`
		PendingOrders int `json:"pendingOrders" description:"待支付订单数"`
		TimeoutOrders int `json:"timeoutOrders" description:"超时订单数"`
	} `json:"orderStats" description:"订单统计"`

	// OrderList commonApi.CommonPageRes[OrderListItem] `json:"orderList" description:"订单分页列表"`
}

// OrderCallbackReq 手动触发订单回调（管理接口）
type OrderCallbackReq struct {
	g.Meta  `path:"/jd-v2/order/callback" tags:"JD V2 Order" method:"post" summary:"手动回调"`
	OrderNo string `json:"orderNo" v:"required#订单号不能为空" description:"订单号"`
}

type OrderCallbackRes struct {
	Success bool   `json:"success" description:"回调是否成功"`
	Message string `json:"message" description:"回调结果消息"`
}

// ListPrefetchOrderReq 获取预拉取订单列表
type ListPrefetchOrderReq struct {
	g.Meta `path:"/jd-v2/prefetch/orders" tags:"JD V2 Prefetch" method:"get" summary:"获取预拉取订单列表"`
	commonApi.CommonPageReq
	AccountId       int64                              `json:"accountId" description:"账号ID"`
	AccountName     string                             `json:"accountName" description:"账号名称"`
	Amount          float64                            `json:"amount" description:"订单金额"`
	PlatformOrderNo string                             `json:"platformOrderNo" description:"平台订单号"`
	Status          consts.CamelOilPrefetchOrderStatus `json:"status" description:"状态：1待匹配 2已匹配 3已过期 4已失效"`
	DateRange       []*gtime.Time                      `json:"dateRange" description:"时间范围"`
}

type PrefetchOrderListItem struct {
	Id              int64                              `json:"id" description:"主键ID"`
	AccountId       int64                              `json:"accountId" description:"拉取时使用的账号ID"`
	AccountName     string                             `json:"accountName" description:"账号名称"`
	Amount          float64                            `json:"amount" description:"预拉取订单金额"`
	PlatformOrderNo string                             `json:"platformOrderNo" description:"骆驼平台订单号"`
	AlipayUrl       string                             `json:"alipayUrl" description:"支付宝支付链接"`
	Status          consts.CamelOilPrefetchOrderStatus `json:"status" description:"预拉取订单状态：1待匹配 2已匹配 3已过期 4已失效"`
	OrderNo         string                             `json:"orderNo" description:"匹配后的订单号"`
	MatchedAt       *gtime.Time                        `json:"matchedAt" description:"匹配时间"`
	ExpireAt        *gtime.Time                        `json:"expireAt" description:"预拉取订单过期时间"`
	FailureReason   string                             `json:"failureReason" description:"失败原因"`
	Remark          string                             `json:"remark" description:"备注信息"`
	CreatedAt       *gtime.Time                        `json:"createdAt" description:"创建时间"`
	UpdatedAt       *gtime.Time                        `json:"updatedAt" description:"更新时间"`
}

type ListPrefetchOrderRes struct {
	commonApi.CommonPageRes[PrefetchOrderListItem]
}

// ExportOrderReq 导出订单数据
type ExportOrderReq struct {
	g.Meta `path:"/jd-v2/order/export" tags:"JD V2 Order" method:"get" summary:"导出订单数据"`
	commonApi.CommonPageReq
	MerchantOrderId string                     `json:"merchantOrderId" description:"商户订单号"`
	OrderNo         string                     `json:"orderNo" description:"系统订单号"`
	AccountId       int64                      `json:"accountId" description:"账号ID"`
	Status          consts.CamelOilOrderStatus `json:"status" description:"订单状态"`
	PayStatus       consts.CamelOilPayStatus   `json:"payStatus" description:"支付状态"`
	DateRange       []*gtime.Time              `json:"dateRange" description:"时间范围"`
}

type ExportOrderRes struct {
}
