package schema

import (
	"time"
)

// ChatAssistant ChatAssistant对象
type ChatAssistant struct {
	RecordID    string       `json:"record_id"`    // 记录id
	OrgId       string       `json:"org_id"`       // 组织id
	UserId      string       `json:"user_id"`      // 所属用户id
	Name        string       `json:"name"`         // 助手名称
	Desc        string       `json:"desc"`         // 描述
	Source      int          `json:"source"`       // 来源 1 h5 2 钉钉机器人
	RagChatId   string       `json:"rag_chat_id"`  // rag_chat_id
	Datasets    Datasets     `json:"datasets"`     // 绑定的知识库id
	CreatedAt   time.Time    `json:"created_at"`   // 创建时间
	CreatorId   string       `json:"creator_id"`   // 创建人id
	CreatorName string       `json:"creator_name"` // 创建人名称
	Sessions    ChatSessions `json:"sessions"`     // 会话列
}

// ChatAssistantQueryParam 查询条件
type ChatAssistantQueryParam struct {
	OrgId     string
	LikeName  string
	RecordIDs []string
	CreatorId string // 创建者id
	UserId    string // 所属用户id
}

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

type ChatAssistants []*ChatAssistant

// ChatAssistantQueryResult ChatAssistant对象查询结果
type ChatAssistantQueryResult struct {
	Data       ChatAssistants
	PageResult *PaginationResult
}

// AssistantPermissionStatus 对话助手知识库权限比对结果
type AssistantPermissionStatus struct {
	Synced            bool     `json:"synced"`              // 助手已绑定的知识库是否与用户当前可访问的一致
	NeedCreate        bool     `json:"need_create"`         // 用户还没有 h5 助手，需要创建
	AssistantId       string   `json:"assistant_id"`        // 现有 h5 助手 id（若存在）
	CurrentDatasetIds []string `json:"current_dataset_ids"` // 用户当前可访问的知识库 id
	BoundDatasetIds   []string `json:"bound_dataset_ids"`   // 助手已绑定的知识库 id
	Added             []string `json:"added"`               // 相较助手需要新增的 KB id
	Removed           []string `json:"removed"`             // 相较助手需要移除的 KB id
}

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

// FillDatasetId 填充知识库id
func (a ChatAssistants) FillDatasetId(data ChatDatasets) {
	for _, v := range a {
		for _, d := range data {
			if v.RecordID == d.ChatAssistantId {
				v.Datasets = append(v.Datasets, &Dataset{RecordID: d.DatasetId})
				continue
			}
		}
	}
}

// FillDatasetId 填充知识库id
func (a ChatAssistants) FillDataset(data Datasets) {
	for _, v := range a {
		for _, d := range v.Datasets {
			for _, d2 := range data {
				if d.RecordID == d2.RecordID {
					d.Name = d2.Name
					d.OrgId = d2.OrgId
					d.RagDataId = d2.RagDataId
					d.FileCount = d2.FileCount
					continue
				}
			}
		}
	}
}

// FillDatasetId 填充知识库id
func (a ChatAssistants) FillSession(sessions ChatSessions) {
	for _, v := range a {
		for _, s := range sessions {
			if v.RecordID == s.AssistantId {
				v.Sessions = append(v.Sessions, s)
				continue
			}
		}
	}
}
