package entity

import (
	"context"
	"gorm.io/gorm"
	"yx-dataset-server/app/schema"
)

// GetDatasetFileDB 获取DatasetFile存储
func GetDatasetFileDB(ctx context.Context, defDB *gorm.DB) *gorm.DB {
	return getDBWithModel(ctx, defDB, DatasetFile{})
}

// SchemaDatasetFile DatasetFile对象
type SchemaDatasetFile schema.DatasetFile

// ToDatasetFile 转换为DatasetFile实体
func (a SchemaDatasetFile) ToDatasetFile() *DatasetFile {
	item := &DatasetFile{
		RecordID:    a.RecordID,
		DatasetId:   a.DatasetId,
		Name:        a.Name,
		Url:         a.Url,
		Size:        a.Size,
		MD5:         a.MD5,
		Type:        a.Type,
		Enabled:     a.Enabled,
		RagFileId:   a.RagFileId,
		ParseStatus: a.ParseStatus,
		CreatorId:   a.CreatorId,
	}
	return item
}

// ToSchemaDatasetFile 转换为DatasetFile对象
func (a DatasetFile) ToSchemaDatasetFile() *schema.DatasetFile {
	item := &schema.DatasetFile{
		RecordID:    a.RecordID,
		DatasetId:   a.DatasetId,
		Name:        a.Name,
		Url:         a.Url,
		Size:        a.Size,
		MD5:         a.MD5,
		Type:        a.Type,
		Enabled:     a.Enabled,
		RagFileId:   a.RagFileId,
		ParseStatus: a.ParseStatus,
		CreatedAt:   a.CreatedAt,
		CreatorId:   a.CreatorId,
	}
	return item
}

// DatasetFile DatasetFile实体
type DatasetFile struct {
	gorm.Model
	RecordID    string `gorm:"column:record_id;size:32;index;"`  // 记录id
	DatasetId   string `gorm:"column:dataset_id;size:32;index;"` // 知识库id
	Name        string `gorm:"column:name;size:200;"`            // 名称
	Url         string `gorm:"column:url;size:300;"`             // 文件地址
	Size        int64  `gorm:"column:size;"`                     // 文件大小
	MD5         string `gorm:"column:md5;size:50;"`              // md5
	Type        string `gorm:"column:type;size:10;"`             // 文件类型
	Enabled     bool   `gorm:"column:enabled;"`                  // 启用状态
	RagFileId   string `gorm:"column:rag_file_id;"`              // rag平台文件id
	ParseStatus int    `gorm:"column:parse_status;"`             // 解析状态
	CreatorId   string `gorm:"column:creator_id;size:32;"`       // 创建人id
}

// DatasetFiles DatasetFile列表
type DatasetFiles []*DatasetFile

// ToSchemaDatasetFiles 转换为DatasetFile对象列表
func (a DatasetFiles) ToSchemaDatasetFiles() []*schema.DatasetFile {
	list := make([]*schema.DatasetFile, len(a))
	for i, item := range a {
		list[i] = item.ToSchemaDatasetFile()
	}
	return list
}
