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

export function TaskGeneratePrompt(options: {
    modalCtrl: ModalController
    shareData: any
}
): AgentTaskStep {
    let task2 = new AgentTaskStep({ title: "穿搭思路生成", shareData: options.shareData.userProfile })
    task2.handle = () => {
        console.log("任务2:穿搭思路生成(Prompt)执行中...");
        return new Promise(async (resolve, reject) => {
            //获取当前任务集共享数据：userProfile
            const userProfileJson = options.shareData.userProfileJson;

            let PromptTemplate = `您是一名专业的服装搭配师，根据客户的身高、体重等数据，为客户推荐适合TA的穿搭方案。
            客户的要求如下：${userProfileJson}
            结果以JSON格式表示：(以下是JSON格式的参考方案)
            {
                "方案名":"方案名（例如：夏日小清新）",
                "性别":"性别",
                "年龄":"年龄",
                ......
                （传入的json中有什么属性就翻译一下，补上什么）
                "schemeList":{
                    "短袖":["name":"特征描述(简洁,例如:轻薄短袖衬衫)","desc":"穿搭思路描述(具体,例如:选择一款轻薄透气的短袖衬衫，颜色可以是浅蓝色或淡灰色，搭配细条纹或小格纹图案，以增加层次感。衬衫的剪裁要稍微宽松，以便于活动，适合办公室环境。)"],
                    "牛仔裤":["name":"特征描述","desc":"穿搭思路描述"],
                    ......
                }
            }
            1.设计思路一定要有理有逻辑，并且要详细。
            2.身上所有的衣服从里到外全部写出来加入schemeList中，例如冬季穿衣较多，从里到外有内衬衣、毛衣、夹克、棉袄、外套等。
            这部分你能想得到的都要写出来。但是不要完全不符合逻辑。例如又穿了外套，外套里面又穿了外套，这种不符合逻辑的就不要写。
            3.不要写笼统的“上衣”“下装”“配饰”等这种广泛的分类词条，要写例如“裤子”“棉毛衫”“项链”“围巾”等具体的服装类型的词条。
            4.一定要注重用户的customDesc自定义描述，他们的意见极度重要，一定要体现出来。
            `;
            let completion = new FmodeChatCompletion([
                { role: "system", content: "" },
                { role: "user", content: PromptTemplate }
            ])
            completion.sendCompletion().subscribe((message: any) => {
                if (task2.progress < 0.3) {
                    task2.progress += 0.003
                }
                if (task2.progress >= 0.3 && task2.progress <= 0.8) {
                    task2.progress += 0.002
                }
                if (task2.progress >= 0.8) {
                    task2.progress += 0.001
                }
                // 打印消息
                console.log(message.content)
                // 赋值消息内容给任务集共享数据
                if(message.complete){ // 判断message为完成状态，则设置isComplete为完成
                options.shareData.designPrompt=extactAndParseJsonFromString(message.content)
                task2.progress = 1;
                console.log(options.shareData);
                resolve(true);
                }
            })
        })
    }
    return task2;
}