package entitys

import (
	"ai_scheduler/internal/data/constants"
	"ai_scheduler/internal/data/model"
	"encoding/json"
)

type Recognize struct {
	SystemPrompt string                // 系统提示内容
	UserContent  *RecognizeUserContent // 用户输入内容
	ChatHis      ChatHis               // 会话历史记录
	Tasks        []RegistrationTask
	Ch           chan Response
	Match        *Match
	Ext          []byte
	OutPutScene  OutPutScene
}

type OutPutScene string

const OutPutSceneDingTalk OutPutScene = "markdown"
const OutPutFormatHtml OutPutScene = "html"

type TaskExt struct {
	Auth          string `json:"auth"`
	Session       string `json:"session"`
	Key           string `json:"key"`
	SessionInfo   model.AiSession
	Sys           model.AiSy
	KnowledgeConf KnowledgeBaseRequest
	UserName      string
}

type RegistrationTask struct {
	Name             string
	Desc             string
	Index            string
	TaskConfigDetail TaskConfigDetail
}

type RecognizeUserContent struct {
	Text          string           // 用户输入的文本内容
	File          []*RecognizeFile // 文件内容
	ActionCardUrl string           // 操作卡片链接
	Tag           string           // 工具标签
}

type FileData []byte

type RecognizeFile struct {
	FileRec      string             //文件识别内容
	FileData     FileData           // 文件数据(二进制格式)
	FileType     constants.FileType // 文件类型(文件类型，能填最好填，可以跳过一层判断)
	FileRealMime string             // 文件真实MIME类型
	FileUrl      string             // 文件下载链接
}

func (r *Recognize) GetTaskExt() *TaskExt {
	var ext TaskExt
	if err := json.Unmarshal(r.Ext, &ext); err != nil {
		return nil
	}

	return &ext
}

func (r *Recognize) GetSession() string {
	ext := r.GetTaskExt()
	if ext == nil {
		return ""
	}
	return ext.Session
}
