package dto

// CreateOrderPackageInvalidateTaskRequest 创建订单套餐失效任务请求
type CreateOrderPackageInvalidateTaskRequest struct {
	FileKey     string   `json:"file_key" validate:"required,max=500" required:"true" maxLength:"500" description:"CSV文件对象存储Key（通过/storage/upload-url上传后获得；CSV单列 order_no）"`
	VoucherKeys []string `json:"voucher_keys" validate:"omitempty,max=5,dive,max=500" maxItems:"5" description:"支付凭证对象存储Key列表（可选，最多5个）"`
	Remark      string   `json:"remark" validate:"omitempty,max=1000" maxLength:"1000" description:"运营备注（可选，创建后只读）"`
}

// OrderPackageInvalidateTaskResponse 任务详情响应
type OrderPackageInvalidateTaskResponse struct {
	ID           uint     `json:"id" description:"任务ID"`
	TaskNo       string   `json:"task_no" description:"任务编号"`
	Status       int      `json:"status" description:"任务状态 (1:待处理, 2:处理中, 3:已完成, 4:失败)"`
	StatusName   string   `json:"status_name" description:"状态名称（中文）"`
	TotalCount   int      `json:"total_count" description:"总行数"`
	SuccessCount int      `json:"success_count" description:"成功数"`
	FailCount    int      `json:"fail_count" description:"失败数"`
	FileName     string   `json:"file_name" description:"原始文件名"`
	VoucherKeys  []string `json:"voucher_keys" description:"支付凭证Key列表"`
	Remark       string   `json:"remark,omitempty" description:"运营备注"`
	CreatorName  string   `json:"creator_name" description:"操作人姓名"`
	ErrorMessage string   `json:"error_message,omitempty" 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:"更新时间"`
}

// OrderPackageInvalidateTaskDetailResponse 任务详情（含失败明细）
type OrderPackageInvalidateTaskDetailResponse struct {
	OrderPackageInvalidateTaskResponse
	FailedItems []InvalidateFailedItem `json:"failed_items" description:"失败记录列表"`
}

// InvalidateFailedItem 失效失败记录
type InvalidateFailedItem struct {
	Line    int    `json:"line" description:"CSV 行号"`
	OrderNo string `json:"order_no" description:"订单号"`
	Reason  string `json:"reason" description:"失败原因"`
}

// ListOrderPackageInvalidateTaskRequest 任务列表查询请求
type ListOrderPackageInvalidateTaskRequest 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=4" minimum:"1" maximum:"4" description:"按状态过滤 (1:待处理, 2:处理中, 3:已完成, 4:失败)"`
}

// OrderPackageInvalidateTaskListResponse 任务列表响应
type OrderPackageInvalidateTaskListResponse struct {
	Total    int64                                 `json:"total" description:"总记录数"`
	Page     int                                   `json:"page" description:"当前页码"`
	PageSize int                                   `json:"size" description:"每页条数"`
	List     []*OrderPackageInvalidateTaskResponse `json:"items" description:"任务列表"`
}
