import { ModalController } from "@ionic/angular";
import { ImagineWork, DalleOptions } from 'fmode-ng';
import { AgentTaskStep } from "src/agent/agent.task";
import { CloudObject, CloudQuery, CloudUser } from "src/lib/ncloud";

export function TaskGeneratePicture(options: {
    modalCtrl: ModalController
    shareData: any
}
): AgentTaskStep {
    let task3 = new AgentTaskStep({ title: "预览图片生成", shareData: options.shareData.userProfile })
    task3.handle = () => {
        console.log("任务3:生成预览图片(Picture)执行中...");
        return new Promise(resolve => {
            // let userInput = await getUserInput(options.modalCtrl,{fieldsArray:[
            //   {name:"绘图要求",type:"text",desc:"画风、构图等等"}
            // ]});
            // console.log(userInput)
            let imagineWork = new ImagineWork();
            // 图片生成
            const designPrompt = JSON.stringify(options.shareData.designPrompt);
            let cloth=options.shareData.designPrompt['schemeList'];
            const clothPrompt = JSON.stringify(cloth);
            let PicturePrompt = `您是一名服装搭配师，请根据客户信息，搭配出穿搭效果图。
                以下是穿搭和信息：${designPrompt}
                有一些注意事项是你需要注意的：
                1.图片的规格为：高 (1024x1792)应该是垂直方向的，请尽量保持这个比例。图片内容不要超过范围。
                2.客户一定要用正确的年龄段，不要给你的是20岁，你用30多岁的人当模特，这是不行的。
                3.客户的自定义描述极度重要，请务必按照模特的描述来拍摄。
                4.模特一定要用正确的体型。比如模特是80kg，你找个瘦子当模特，这是不行的，一定是体型肥胖的。
                5.图片结构整齐一些，不要有太多凌乱的感觉。左半边只需要一张整体预览，右半边展示schemeList中服装的细节图。
                6.搭配效果图和服装细节图，一定都要分布在正方形的画布上，不要超出范围。`
            console.log(PicturePrompt);
            let imgOptions: DalleOptions = { prompt: PicturePrompt }
            let countDownInt = setInterval(() => {
                task3.progress += 0.03
            }, 1000)
            imagineWork?.draw(imgOptions).subscribe((work: any) => {
                console.log("imagineWork", work?.toJSON())
                console.log("images", work?.get("images"))
                if (work?.get("images")?.length) {
                    options.shareData.images = work?.get("images");
                    clearInterval(countDownInt);
                    task3.progress = 1;
                    console.log(options.shareData.images[0]);
                    //将图片url导入数据库
                    let currentUser = new CloudUser();
                    let image = options.shareData.images[0];
                    let designPrompt = JSON.stringify(options.shareData.designPrompt);
                    let content = designPrompt
                    let newImageUrl = new CloudObject("GenerateResult");
                    newImageUrl.set({
                        "image": image,
                        "content": content,
                        "UserID": currentUser.toPointer()
                    });
                    newImageUrl.save();
                    resolve(true);
                }
            })
        })
    }
    return task3;
}

