import { AgentTaskStep } from 'src/agent/agent.task';
import { getUserInput } from 'src/agent/agent.input';
import { ModalController } from '@ionic/angular/standalone';
import { FmodeChatCompletion } from 'fmode-ng';
import { extactAndParseJsonFromString } from 'src/agent/agent.json';

export function TaskInqueryUserStory(options:{
    modalCtrl:ModalController
    shareData:any}
    ):AgentTaskStep{
        let task1 = new AgentTaskStep({title:"导诊：根据患者描述导诊对应科室",shareData:options.shareData})
        task1.handle = ()=>{
            return new Promise(async (resolve,reject)=>{
                // 获取用户输入的诗词
                let userInput = await getUserInput(options.modalCtrl,{fieldsArray:[
                    {name:"症状口述",type:"text",desc:"描述下感觉到的症状或不适。"}
                ]});

                if(!userInput?.['症状口述']){
                    task1.error = "无症状口述，无法判断科室"
                    resolve(false);
                }

                // 文本生成
                let PromptTemplate = `您是一名专业的医护人员，在门诊大厅负责导诊服务，请您根据患者的症状口述，为其选择合适的科室进行挂号。
                患者症状口述：${userInput['症状口述']}
                结果以JSON格式表示：
                症状名称为具体的症状，症状描述为用户的感受，持续时间若没有直接说，可以写近期即可。
                {
                    "keshi":"科室名称",
                    "sympList":[
                        {"title":"症状名称","desc":"症状描述","duration":"持续时间"}
                    ]
                }
                `
                let completion = new FmodeChatCompletion([
                    {role:"system",content:""},
                    {role:"user",content:PromptTemplate}
                    ])
                    completion.sendCompletion().subscribe((message:any)=>{
                        if(task1.progress < 0.5){
                            task1.progress += 0.05
                        }
                        if(task1.progress >= 0.5 && task1.progress <= 0.8){
                            task1.progress += 0.01
                        }
                        if(task1.progress >= 0.8 && task1.progress <= 1){
                            task1.progress += 0.001
                        }
                        // 打印消息体
                        console.log(message.content)
                        // 赋值消息内容给组件内属性
                        if(message.complete){ // 判断message为完成状态，则设置isComplete为完成
                            options.shareData.userStory = extactAndParseJsonFromString(message.content)
                            options.shareData.userStory['症状口述'] = userInput['症状口述']
                            task1.progress = 1
                            resolve(true)
                        }
                })
            })

        }
        return task1
}