import { CommonModule } from '@angular/common';
import { ChangeDetectorRef, Component, OnInit, ViewChild } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
import { ModalController } from '@ionic/angular/standalone';
import { ChatPanelComponent } from 'fmode-ng'
import Parse from "parse";
import { combineLatest } from 'rxjs';

// 添加Icons
import { addIcons } from 'ionicons';
import * as icons from 'ionicons/icons';
addIcons(icons);

@Component({
  selector: 'app-test-chat-panel',
  templateUrl: './test-chat-panel.component.html',
  styleUrls: ['./test-chat-panel.component.scss'],
  standalone: true,
  imports:[
    CommonModule,
    ChatPanelComponent,
  ]
})
export class TestChatPanelComponent  implements OnInit {
  @ViewChild(ChatPanelComponent) chatComp:ChatPanelComponent|undefined
  leftButtons:any[]=[]
  modelList:any[]=[]
  isDirect:boolean=true;
  hideShare:boolean=true;
  hideModalSelect:boolean=true;
  hideInputPreview:boolean = true;
  chatId:string = ""
  roleId:string = ""
  pid:string = ""
  constructor(
    private route:ActivatedRoute,
    private cdRef:ChangeDetectorRef,
    private modalCtrl:ModalController
  ) { 
    combineLatest([this.route.params,this.route.queryParams]).subscribe(async (data:any)=>{
      let params = data[0] || {}

      this.chatId = params['chatId'] || this.chatId || null;
      this.roleId = params['roleId'] || this.roleId || null;
      this.pid = params['pid'] || this.pid || null;
      console.log("this.pid",this.pid)
      // 异步加载的后续数据 操作按钮
      let bint = setInterval(() => {
        if(this.roleId){
          clearInterval(bint);
          return
        }
        this.initPanelConfig();
      }, 2000);
    })
  }


  ngOnInit() {
        this.initPanelConfig();
        // 异步加载的后续数据 提示词
        let pint = setInterval(() => {
          if(this.chatComp?.fmodeChat?.promptList?.length){
            clearInterval(pint);
            return
          }
          this.getChatPrompt();
        }, 2000);

        // 异步加载的后续数据 采访人物 ChatSession.person
        let personInt = setInterval(() => {
          if(this.chatComp?.fmodeChat?.chatSession?.get("person")){
            clearInterval(personInt)
          }
          if(!this.chatComp?.fmodeChat?.chatSession?.get("person")){
            if(this.pid){
              this.chatComp?.fmodeChat?.chatSession?.set("person",{type:"Pointer",className:"Person",objectId:this.pid})
            }
          }
        }, 2000);
  }

  // 初始化聊天面板的设置
  initPanelConfig(){
    this.roleId = this.chatComp?.fmodeChat?.chatSession?.get("role")?.id || this.roleId;

    // 按钮自定义
     this.leftButtons = [
       // 提示 当角色配置预设提示词时 显示
       {
        title:"话题灵感",
        showTitle:true,
        icon:"color-wand-outline",
        onClick:()=>{
          if(this.chatComp){
            this.chatComp.fmodeChat.isPromptModalOpen = true
          }
        },
        show:()=>{
          return this.chatComp?.fmodeChat?.promptList?.length
        }
      }
   ]

      this.leftButtons.push({ // 总结 结束并归档本次对话
            title:"AI总结对话",
            showTitle:true,
            icon:"archive-outline",
            onClick:()=>{
              if(this.chatComp){
                // this.chatComp.fmodeChat.isPromptModalOpen = true
                if(this.chatComp.fmodeChat){
                  console.log(JSON.stringify(this.chatComp.fmodeChat.messageList))
                  // alert("处理对话记录")
                }
              }
              },
            show:()=>{ 
              return !this.chatComp?.fmodeChat?.chatSession?.get("story")?.id
              }
        })

        this.leftButtons.push({ // 总结 结束并归档本次对话
          title:"聊天心理分析",
          showTitle:true,
          icon:"archive-outline",
          onClick:()=>{
            if(this.chatComp){
              // this.chatComp.fmodeChat.isPromptModalOpen = true
              if(this.chatComp.fmodeChat){
                let messageList = JSON.parse(JSON.stringify(this.chatComp.fmodeChat.messageList))
                messageList = messageList.filter((item:any)=>item.role!="system"&&item?.hidden!=true)
                let qaContent = messageList.map((item:any)=>{
                  let roleName = "当前用户"
                  if(item.role!="user"){
                    if(this.chatComp&&this.chatComp.fmodeChat.role){
                      roleName = this.chatComp.fmodeChat.role.get("name");
                    }else{
                      roleName = "AI助理"
                    }
                  }
                  return `${roleName}:${item.content}`
                }
                ).join("\n")
                console.log(qaContent)
                // alert("处理对话记录")
              }
            }
            },
          show:()=>{ 
            return !this.chatComp?.fmodeChat?.chatSession?.get("story")?.id
            }
      })

    

      setTimeout(()=>{
          if(this.chatComp&&this.chatComp.fmodeChat){
            // 自定义左下角操作按钮
            console.log("左下角操作按钮",this.chatComp.fmodeChat.leftButtons);
            this.chatComp.fmodeChat.leftButtons = this.leftButtons;
            
            // 自定义角色名称
            console.log("自定义角色",this.chatComp.fmodeChat.role);
                        this.chatComp.fmodeChat.role.set("name","晓晓");
            this.chatComp.fmodeChat.role.set("title","心理咨询师");
            this.chatComp.fmodeChat.role.set("desc","一名亲切和蔼的心理咨询师，晓晓，年龄36岁");
            this.chatComp.fmodeChat.role.set("tags",["焦虑","抑郁"]);
            this.chatComp.fmodeChat.role.set("avatar","https://nova-cloud.obs.cn-south-1.myhuaweicloud.com/storage/aigc/imagine/Q4Zif7fTbK-0.png")
            this.chatComp.fmodeChat.role.set("prompt",`
# 角色设定
您是一名亲切和蔼的心理咨询师，晓晓，年龄36岁，需要完成陪来访者聊聊天，随意轻松一些。

# 对话环节
0.破冰，互相了解，引导用户介绍自己
1.拓展话题，根据用户的介绍，拓展一些和其心理状态相关的话题
- 引导，可深入的点，以用户自述为主
- 当信息充足时候，确认用户心理状态，并进入下一个环节
2.引导收尾，委婉引导用户结束本次对话
- 用户同意结束后，结束本次对话，如果依依不舍，可以再陪聊一会儿`);
//             this.chatComp.fmodeChat.role.set("name","晓晓");
//             this.chatComp.fmodeChat.role.set("title","主任医师");
//             this.chatComp.fmodeChat.role.set("desc","一名专业的全科医生，晓晓，年龄36岁");
//             this.chatComp.fmodeChat.role.set("tags",["呼吸道","感染科"]);
//             this.chatComp.fmodeChat.role.set("avatar","https://nova-cloud.obs.cn-south-1.myhuaweicloud.com/storage/aigc/imagine/Q4Zif7fTbK-0.png")
//             this.chatComp.fmodeChat.role.set("prompt",`
// # 角色设定
// 您是一名专业的全科医生，晓晓，年龄36岁，需要完成一次完整的门诊服务。

// # 对话环节
// 0.导诊（根据用户基本情况，引导挂号合适的科室）
// 1.预设的问询方式（感冒问呼吸、肚子疼叩诊）
// - 打招呼，以用户自述为主
// - 当信息充足时候，确认用户症状对应的科室，并进入下一个环节
// 2.拓展的问询细节
// 例如：用户反映呼吸不畅，拓展出：是否咳嗽；是否感觉痛或者痒等其他需要的问题。
// - 当问询细节补充完成后进入下一个环节
// 3.初步的诊断结果，并且同时列出检查检验项目
// 初步诊断：确定需要有哪些进一步检查
// 检查检验：获取医学客观数据
// - 等待用户提交客观数据，进入下一阶段
// 4.给出诊断方案并给出处方

// # 开始话语
// 当您准备好了，可以以一个医生的身份，向来访的用户打招呼。
//             `);

            this.cdRef.detectChanges();
          }
      },1000)
    

   // 模型自定义
   let ChatModel = Parse.Object.extend("ChatModel");
   let model1 = new ChatModel();
   model1.set({
       name:"语伴4.5-128k",
       code:"fmode-4.5-128k",
       model:"gpt-4o-mini",
       credit:0.096,
   })
  this.modelList = [model1]


   console.log("initPanelConfig",this.leftButtons,this.modelList)
 }

 async getChatPrompt(){
     let query = new Parse.Query('ChatPrompt')
     query.notEqualTo('isDeleted', true)
    //  query.equalTo('company', localStorage.getItem("company"))
     query.equalTo('role', this.chatComp?.fmodeChat?.role)
     query.include('role')
     let promptData = await query.find()
     if(this.chatComp&&this.chatComp.fmodeChat){
       this.chatComp.fmodeChat.promptList = promptData
       this.chatComp.fmodeChat.promptList.forEach((item:any)=>{
         let cate = item.get('role').get('promptCates').filter((cate:any) => cate.name == item.get('cate'))
         item.img = cate[0].img
        })
      }
   }
}
