package dto

// CreateAssetPackageBatchOrderRequest 创建资产套餐批量订购任务请求。
type CreateAssetPackageBatchOrderRequest struct {
	FileKey       string   `json:"file_key" validate:"required,max=500" required:"true" maxLength:"500" description:"单列CSV对象存储Key（每行一个资产标识）"`
	PackageID     uint     `json:"package_id" validate:"required,min=1" required:"true" minimum:"1" description:"整批统一套餐ID"`
	PaymentMethod string   `json:"payment_method" validate:"required,oneof=wallet offline" required:"true" description:"整批统一支付方式 (wallet:钱包支付, offline:线下支付)"`
	VoucherKeys   []string `json:"voucher_keys" validate:"omitempty,max=5,dive,max=500" maxItems:"5" description:"线下支付凭证对象存储Key列表（offline时1至5个）"`
}

// AssetPackageBatchOrderTaskResponse 批量订购任务响应。
type AssetPackageBatchOrderTaskResponse struct {
	ID            uint     `json:"id" description:"任务ID"`
	TaskNo        string   `json:"task_no" description:"任务编号"`
	PackageID     uint     `json:"package_id" description:"套餐ID"`
	PackageCode   string   `json:"package_code" description:"套餐编码快照"`
	PackageName   string   `json:"package_name" description:"套餐名称快照"`
	PaymentMethod string   `json:"payment_method" description:"支付方式 (wallet:钱包支付, offline:线下支付)"`
	FileName      string   `json:"file_name" description:"源CSV文件名"`
	VoucherKeys   []string `json:"voucher_keys" description:"线下支付凭证对象存储Key列表"`
	Status        int      `json:"status" description:"任务状态 (1:待处理, 2:处理中, 3:已完成, 4:已失败, 5:已取消)"`
	StatusName    string   `json:"status_name" description:"任务状态名称（中文）"`
	TotalCount    int      `json:"total_count" description:"总行数"`
	SuccessCount  int      `json:"success_count" description:"成功数"`
	FailCount     int      `json:"fail_count" description:"失败数"`
	ErrorMessage  string   `json:"error_message,omitempty" description:"任务级中文错误信息"`
	CreatorName   string   `json:"creator_name" description:"操作人姓名快照"`
	StartedAt     *string  `json:"started_at,omitempty" description:"开始处理时间"`
	CompletedAt   *string  `json:"completed_at,omitempty" description:"完成时间"`
	CreatedAt     string   `json:"created_at" description:"创建时间"`
	UpdatedAt     string   `json:"updated_at" description:"更新时间"`
}

// AssetPackageBatchOrderResultItemResponse 批量订购单行结果响应。
type AssetPackageBatchOrderResultItemResponse struct {
	Line            int    `json:"line" description:"CSV行号"`
	AssetIdentifier string `json:"asset_identifier" description:"资产标识"`
	Status          int    `json:"status" description:"单行状态 (3:成功, 4:失败)"`
	StatusName      string `json:"status_name" description:"单行状态名称（中文）"`
	OrderID         uint   `json:"order_id,omitempty" description:"成功订单ID"`
	OrderNo         string `json:"order_no,omitempty" description:"成功订单号"`
	Amount          int64  `json:"amount,omitempty" description:"成功订单金额（分）"`
	Reason          string `json:"reason,omitempty" description:"中文失败原因"`
}

// AssetPackageBatchOrderTaskDetailResponse 批量订购任务详情响应。
type AssetPackageBatchOrderTaskDetailResponse struct {
	AssetPackageBatchOrderTaskResponse
	Items []AssetPackageBatchOrderResultItemResponse `json:"items" description:"逐行成功和失败明细"`
}

// ListAssetPackageBatchOrderRequest 批量订购任务列表请求。
type ListAssetPackageBatchOrderRequest struct {
	Page     int  `json:"page" query:"page" validate:"omitempty,min=1" minimum:"1" description:"页码（默认1）"`
	PageSize int  `json:"page_size" query:"page_size" validate:"omitempty,min=1,max=100" minimum:"1" maximum:"100" description:"每页条数（默认20，最大100）"`
	Status   *int `json:"status" query:"status" validate:"omitempty,min=1,max=5" minimum:"1" maximum:"5" description:"任务状态 (1:待处理, 2:处理中, 3:已完成, 4:已失败, 5:已取消)"`
}

// AssetPackageBatchOrderTaskListResponse 批量订购任务列表响应。
type AssetPackageBatchOrderTaskListResponse struct {
	Total    int64                                 `json:"total" description:"总记录数"`
	Page     int                                   `json:"page" description:"当前页码"`
	PageSize int                                   `json:"size" description:"每页条数"`
	Items    []*AssetPackageBatchOrderTaskResponse `json:"items" description:"任务列表"`
}

// GetAssetPackageBatchOrderRequest 查询批量订购任务路径参数。
type GetAssetPackageBatchOrderRequest struct {
	ID uint `path:"id" required:"true" description:"任务ID"`
}
