package schema

// 知识库类型（DatasetRelation.Type / Dataset.Type）
const (
	DatasetTypePublic   = 1 // 公共/共享知识库（系统管理员创建）
	DatasetTypeOrg      = 2 // 企业知识库（企业管理员创建）
	DatasetTypePersonal = 3 // 个人知识库（员工自建）
)

// DatasetRelation 知识库关系映射
// BizID 表示授权主体：
//   - 组织级授权：BizID = org_id
//   - 用户级授权：BizID = user_id
// Type 表示该知识库本身的分类（1/2/3），便于前端按类型区分渲染。
type DatasetRelation struct {
	RecordID  string `json:"record_id"`  // 记录id
	DatasetId string `json:"dataset_id"` // 知识库id
	BizId     string `json:"biz_id"`     // 业务id：企业id 或 用户id
	Type      int    `json:"type"`       // 1 公共/共享  2 企业  3 个人
	CreatorId string `json:"creator_id"` // 关联创建人
}

// DatasetRelationQueryParam 查询条件
type DatasetRelationQueryParam struct {
	RecordIDs  []string
	DatasetId  string
	DatasetIds []string
	BizId      string
	BizIds     []string
	Type       int   // 0 表示不按类型筛选
	Types      []int // 按多种类型筛选
}

// DatasetRelationQueryOptions 可选查询参数
type DatasetRelationQueryOptions struct {
	PageParam *PaginationParam
}

type DatasetRelations []*DatasetRelation

// DatasetRelationQueryResult 查询结果
type DatasetRelationQueryResult struct {
	Data       DatasetRelations
	PageResult *PaginationResult
}

// ToDatasetIds 提取 dataset_id 列表
func (a DatasetRelations) ToDatasetIds() []string {
	ids := make([]string, len(a))
	for i, v := range a {
		ids[i] = v.DatasetId
	}
	return ids
}

// FilterByType 按 type 过滤
func (a DatasetRelations) FilterByType(t int) DatasetRelations {
	out := make(DatasetRelations, 0, len(a))
	for _, v := range a {
		if v.Type == t {
			out = append(out, v)
		}
	}
	return out
}
