package model

import (
	"time"

	"gorm.io/gorm"
)

// DeviceImportTask 设备导入任务模型
// 记录设备批量导入的任务状态和处理结果
// 通过异步任务处理 CSV 文件导入设备并绑定卡
type DeviceImportTask struct {
	gorm.Model
	BaseModel      `gorm:"embedded"`
	TaskNo         string            `gorm:"column:task_no;type:varchar(50);uniqueIndex:idx_device_import_task_no,where:deleted_at IS NULL;not null;comment:任务编号(唯一)" json:"task_no"`
	OperationType  string            `gorm:"column:operation_type;type:varchar(32);not null;default:'import';comment:任务业务类型(import/assign_shop/assign_series)" json:"operation_type"`
	TargetID       *uint             `gorm:"column:target_id;comment:批量分配目标店铺或套餐系列ID" json:"target_id"`
	OperatorType   int               `gorm:"column:operator_type;type:int;not null;default:0;comment:任务创建时操作者类型快照" json:"operator_type"`
	OperatorShopID *uint             `gorm:"column:operator_shop_id;comment:任务创建时操作者店铺ID快照" json:"operator_shop_id"`
	BatchNo        string            `gorm:"column:batch_no;type:varchar(100);comment:批次号" json:"batch_no"`
	StorageKey     string            `gorm:"column:storage_key;type:varchar(500);comment:对象存储文件路径" json:"storage_key"`
	FileName       string            `gorm:"column:file_name;type:varchar(255);comment:原始文件名" json:"file_name"`
	Status         int               `gorm:"column:status;type:int;default:1;not null;comment:任务状态 1-待处理 2-处理中 3-已完成 4-失败" json:"status"`
	TotalCount     int               `gorm:"column:total_count;type:int;default:0;comment:总记录数" json:"total_count"`
	SuccessCount   int               `gorm:"column:success_count;type:int;default:0;comment:成功数" json:"success_count"`
	SkipCount      int               `gorm:"column:skip_count;type:int;default:0;comment:跳过数" json:"skip_count"`
	FailCount      int               `gorm:"column:fail_count;type:int;default:0;comment:失败数" json:"fail_count"`
	SkippedItems   ImportResultItems `gorm:"column:skipped_items;type:jsonb;comment:跳过记录详情" json:"skipped_items"`
	FailedItems    ImportResultItems `gorm:"column:failed_items;type:jsonb;comment:失败记录详情" json:"failed_items"`
	WarningCount   int               `gorm:"column:warning_count;default:0;comment:警告数量（部分成功的设备）" json:"warning_count"`
	WarningItems   ImportResultItems `gorm:"column:warning_items;type:jsonb;comment:警告记录详情" json:"warning_items"`
	ErrorMessage   string            `gorm:"column:error_message;type:text;comment:错误信息" json:"error_message"`
	StartedAt      *time.Time        `gorm:"column:started_at;comment:开始处理时间" json:"started_at"`
	CompletedAt    *time.Time        `gorm:"column:completed_at;comment:完成时间" json:"completed_at"`
	RealnamePolicy string            `gorm:"column:realname_policy;type:varchar(20);default:'after_order';not null;comment:导入批次实名策略(none=无需实名,before_order=先实名后充值/购买,after_order=先充值/购买后实名)" json:"realname_policy"`
	CreatorName    string            `gorm:"column:creator_name;type:varchar(100);not null;default:'';comment:操作人姓名快照" json:"creator_name"`
}

// TableName 指定表名
func (DeviceImportTask) TableName() string {
	return "tb_device_import_task"
}

// DeviceImportResultItem 设备导入结果项
type DeviceImportResultItem struct {
	Line      int    `json:"line"`
	VirtualNo string `json:"virtual_no"`
	Reason    string `json:"reason"`
}
