package schema

import "time"

// Dataset Dataset对象
type Dataset struct {
	RecordID    string       `json:"record_id"`    // 记录id
	OrgId       string       `json:"org_id"`       // 归属组织id（共享知识库可为空）
	OrgName     string       `json:"org_name"`     // 归属组织名称
	Name        string       `json:"name"`         // 名称
	Type        int          `json:"type"`         // 1 公共/共享  2 企业  3 个人
	Status      bool         `json:"status"`       // 状态
	FileCount   int          `json:"file_count"`   // 文件数量
	Files       DatasetFiles `json:"files"`        // 文件列表
	RagDataId   string       `json:"rag_data_id"`  // ragFlow知识库id
	CreatorId   string       `json:"creator_id"`   // 创建人id
	CreatorName string       `json:"creator_name"` // 创建人名称
	CreatedAt   time.Time    `json:"created_at"`   // 创建时间
	Sequence    int          `json:"sequence"`     // 排序值
}

// DatasetQueryParam 查询条件
type DatasetQueryParam struct {
	OrgId     string
	LikeName  string
	RecordIds []string
	Type      int   // 0 表示不按类型筛选
	Types     []int // 按多种类型筛选
}

// DatasetQueryOptions Dataset对象查询可选参数项
type DatasetQueryOptions struct {
	PageParam *PaginationParam // 分页参数
}

type Datasets []*Dataset

// DatasetQueryResult Dataset对象查询结果
type DatasetQueryResult struct {
	Data       Datasets
	PageResult *PaginationResult
}

func (a Datasets) ToRecordIds() []string {
	recordIds := make([]string, len(a))
	for k, v := range a {
		recordIds[k] = v.RecordID
	}
	return recordIds
}

func (a Datasets) ToRagDataIds() []string {
	Ids := make([]string, len(a))
	for k, v := range a {
		Ids[k] = v.RagDataId
	}
	return Ids
}

func (a Datasets) ToOrgIds() []string {
	Ids := make([]string, len(a))
	for k, v := range a {
		Ids[k] = v.OrgId
	}
	return Ids
}

// FillCreator 填充创建者信息
func (a Datasets) FillCreator(users Users) {
	for _, o := range a {
		for _, u := range users {
			if o.CreatorId == u.RecordID {
				o.CreatorName = u.RealName
				continue
			}
		}
	}
}

// ToMap
func (a Datasets) ToMap() map[string]*Dataset {
	m := make(map[string]*Dataset)
	for _, item := range a {
		m[item.RecordID] = item
	}
	return m
}

// AvailableDatasets 可用知识库（按 type 分桶）
// 业务场景：
//   - 新建企业：查询全部公共/共享知识库（PublicDatasets）
//   - 为企业新增管理员/员工：查询该企业可访问的全部知识库
//     （被分配的共享 PublicDatasets + 企业自建 OrgDatasets）
type AvailableDatasets struct {
	PublicDatasets Datasets `json:"public_datasets"` // 公共/共享（type=1）
	OrgDatasets    Datasets `json:"org_datasets"`    // 企业自建（type=2）
}
