import { Component } from '@angular/core';
import { Router } from '@angular/router';
import { IonHeader, IonToolbar, IonTitle, IonContent, ModalController, IonButton } from '@ionic/angular/standalone';
import { ExploreContainerComponent } from '../explore-container/explore-container.component';
import { ChatPanelOptions, FmChatModalInput, FmodeChat, FmodeChatMessage, openChatPanelModal } from 'fmode-ng';
// import { ModalAudioMessageComponent } from 'fmode-ng/lib/aigc/chat/chat-modal-input/modal-audio-message/modal-audio-message.component';
import Parse from "parse";
import { 
  IonCard,
  IonCardHeader,
  IonCardTitle,
  IonCardSubtitle,
  IonCardContent,
  IonGrid,
  IonRow,
  IonCol,
  IonIcon
} from '@ionic/angular/standalone';
@Component({
  selector: 'app-tab2',
  templateUrl: 'tab2.page.html',
  styleUrls: ['tab2.page.scss'],
  standalone: true,
  imports: [
    IonHeader, IonToolbar, IonTitle, IonContent, ExploreContainerComponent,
    IonButton,
    IonCard,
    IonCardHeader,
    IonCardTitle,
    IonCardSubtitle,
    IonCardContent,
    IonGrid,
    IonRow,
    IonCol,
    IonIcon,
    // ASR语音输入模块
    FmChatModalInput,
    // ModalAudioMessageComponent
  ]
})
export class Tab2Page {

  constructor(
    private modalCtrl:ModalController,
    private router:Router,
    ) {

  }

  title:string = "123"


  /** 示例：问诊ChatPanel面板 */
  openInquiry(chatId?:string){
    localStorage.setItem("company","E4KpGvTEto")
    let options:ChatPanelOptions = {
      roleId:"2DXJkRsjXK", // 预设，无需更改
      chatId:chatId, // 若存在，则恢复会话。若不存在，则开启新会话
      onChatInit:(chat:FmodeChat)=>{
        console.log("onChatInit");
        console.log("Chat类",chat);
        console.log("预设角色",chat.role);
        // 角色名称
        chat.role.set("name","晓晓");
        // 角色称号
        chat.role.set("title","全科医生");
        // 角色描述
        chat.role.set("desc","一名亲切和蔼的门诊全科主任医生，晓晓，年龄36岁");
        // 角色标签
        chat.role.set("tags",["全科","门诊"]);
        // 角色头像
        chat.role.set("avatar","https://nova-cloud.obs.cn-south-1.myhuaweicloud.com/storage/aigc/imagine/Q4Zif7fTbK-0.png")
        // 角色提示词
        chat.role.set("prompt",`
# 角色设定
您是一名亲切和蔼的专业的全科医生，晓晓，年龄36岁，需要完成一次完整的门诊服务。

# 对话环节
请您严格按照以下环节和用户展开对话，并且注意完成每个环节时，一定要携带[xx完成]的标记。
## 1. 导诊环节
- **开始话语**：
  - “欢迎来到医院，请问您是第一次来吗？我会帮助您找到合适的科室。”
- **进入下个环节条件**：
    - “已经大致了解您反映的情况，建议您到XX科室。[导诊完成]

## 2. 问诊环节
- **对话内容**：
  - “请您详细描述一下您的情况，我需要了解您的病史和相关症状。”
  - “您是否有过敏史或其他健康问题？”
  - “根据您的情况，我认为我们需要进行一些检查，您觉得可以吗？”

- **进入下个环节的条件**：
  - “谢谢您的配合，我将为您安排相关检查。[问诊完成]”

## 3. 检查环节
- **对话内容**：
  - “我们已经完成了问诊，现在我会为您安排必要的检查。”
  - “请您稍等，检查结果会在不久后出来。”
  - “检查结果已经出来了，请您填写下报告的具体数据，让我来为您分析一下。”

- **进入下个环节的条件**：
  - “检查结果已经初步分析，接下来需要请主任医生开始诊断。[检查完成]”

## 4. 诊断与处方环节
- **对话内容**：
  - “根据问诊和检查结果，我的诊断是……”
  - “接下来，我会为您开具相应的处方，请您仔细阅读治疗方案和注意事项。”
  - “您是否有任何问题或者需要进一步的解释？”

- **进入下个环节的条件**：
  - “感谢您的配合，您的处方已经开好，请您按照建议进行后续的治疗或复诊安排。[处方完成]”

# 开始话语
当您准备好了，可以以一个医生的身份，向来访的用户打招呼。`);
        // 对话灵感分类
        let promptCates = [
          {
            "img": "https://file-cloud.fmode.cn/UP2cStyjuk/20231211/r1ltv1023812146.png",
            "name": "外科"
          },
          {
            "img": "https://file-cloud.fmode.cn/UP2cStyjuk/20231211/fo81fg034154259.png",
            "name": "内科"
          },
          {
            "img": "https://file-cloud.fmode.cn/UP2cStyjuk/20231211/fc1nqi034201098.png",
            "name": "心理"
          }
        ]
        setTimeout(() => {
          chat.role.set("promptCates",promptCates)
        }, 500);
        // 对话灵感列表
        let promptList = [
          {
            cate:"外科123",img:"https://file-cloud.fmode.cn/UP2cStyjuk/20231211/r1ltv1023812146.png",
            messageList:["局部疼痛或肿胀","伤口出血或感染","关节活动受限","体表肿块或结节","外伤后活动障碍","皮肤溃疡不愈合","异物刺入或嵌顿","术后并发症复查","肢体麻木或无力","运动损伤疼痛"]
          },
          {
            cate:"内科",img:"https://file-cloud.fmode.cn/UP2cStyjuk/20231211/fo81fg034154259.png",
            messageList:["反复发热或低热","持续咳嗽咳痰","胸闷气短心悸","慢性腹痛腹泻","头晕头痛乏力","体重骤增或骤减","食欲异常或消化不良","尿频尿急尿痛","睡眠障碍易醒","异常出汗或怕冷"]
          },
          {
            cate:"心理",img:"https://file-cloud.fmode.cn/UP2cStyjuk/20231211/fc1nqi034201098.png",
            messageList:["持续情绪低落","焦虑紧张不安","失眠或睡眠过多","注意力难以集中","社交恐惧回避","强迫思维或行为","记忆减退疑虑","躯体无器质性疼痛","自杀倾向念头","现实感丧失体验"]
          },
        ]
        let ChatPrompt = Parse.Object.extend("ChatPrompt");
        setTimeout(() => {
          chat.promptList = promptList.map(item=>{
            let prompt = new ChatPrompt();
            prompt.set(item);
            prompt.img = item.img;
            return prompt;
          })
        }, 500);

        // 功能按钮区域预设
        chat.leftButtons = [
          { // 提示 当角色配置预设提示词时 显示
           title:"话题灵感", // 按钮标题
           showTitle:true, // 是否显示标题文字
           icon:"color-wand-outline", // 标题icon图标
           onClick:()=>{ // 按钮点击事件
               chat.isPromptModalOpen = true
           },
           show:()=>{ // 按钮显示条件
             return chat?.promptList?.length // 存在话题提示词时显示
           }
         },
         { // 总结 结束并归档本次对话
            title:"门诊归档",
            showTitle:true,
            icon:"archive-outline",
            onClick:()=>{
                // 门诊归档，记录用户门诊咨询，并进行过程评价
                console.log(chat?.chatSession) // 本次会话内容数据
              },
            show:()=>{ 
              return true // 一直显示
            }
        }
      ]

      },
      onMessage:(chat:FmodeChat,message:FmodeChatMessage)=>{
        console.log("onMessage",message)
        let content:any = message?.content
        if(typeof content == "string"){
          // 根据阶段标记判断下一步处理过程
          if (content.includes('[导诊完成]')) {
            // 进入问诊环节
            console.log('进入问诊环节');
          } else if (content.includes('[问诊完成]')) {
            // 进入检查环节
            console.log('进入检查环节');
          } else if (content.includes('[检查完成]')) {
            // 进入诊断与处方环节
            console.log('进入诊断与处方环节');
          } else if (content.includes('[处方完成]')) {
            // 结束会话或其他逻辑
            console.log('结束会话');
          }
        }
      },
      onChatSaved:(chat:FmodeChat)=>{
        // chat?.chatSession?.id 本次会话的 chatId
        console.log("onChatSaved",chat,chat?.chatSession,chat?.chatSession?.id)
      }
    }
    openChatPanelModal(this.modalCtrl,options)
  }


// 新建对话（强制创建新会话）
startNewConsult() {
  localStorage.removeItem(this.lastChatKey); // 清除历史ID
  this.openConsult(undefined); // 显式传递undefined
}

// 恢复对话（使用存储的ID）
restoreConsult() {
  const lastId = this.getLastChatId();
  this.openConsult(lastId); // 显式传递存储的ID
}
  
private openConsult(chatId?:string){
      // 如果传入chatId参数，优先使用传入的ID
    //const targetChatId = chatId ?? this.getLastChatId();
    
    localStorage.setItem("company","E4KpGvTEto")
    let options:ChatPanelOptions = {
      roleId:"2DXJkRsjXK", // 预设，无需更改
      chatId:chatId, // 若存在，则恢复会话。若不存在，则开启新会话
      //chatId:targetChatId,
      onChatInit:(chat:FmodeChat)=>{
        console.log("onChatInit");
        console.log("Chat类",chat);
        console.log("预设角色",chat.role);
        // 角色名称
        chat.role.set("name","林心怡");
        // 角色称号
        chat.role.set("title","资深心理咨询师");
        // 角色描述
        chat.role.set("desc","国家二级心理咨询师，专注认知行为疗法");
        // 角色标签
        chat.role.set("tags",['情绪管理', '人际关系']);
        // 角色头像
        chat.role.set("avatar","/assets/avatars/xinli1.jpeg")
        // 角色提示词
        chat.role.set("prompt", `
# 角色设定
您是一位专业且富有同理心的心理陪伴师，主要目标是帮助用户进行情绪管理和自我成长。

# 对话流程
## 1. 情绪倾听阶段
- 使用开放式提问：
  - "今天有什么想和我分享的心情吗？"
  - "我注意到您提到...可以多说一些吗？[倾听完成]

## 2. 引导反思阶段
- 使用引导性问题：
  - "如果用一种颜色描述此刻的心情，会是什么颜色呢？为什么？"
  - "这种感受让您联想到过去的哪些经历吗？[反思完成]

## 3. 认知调整阶段
- 提供新的视角：
  - "有没有可能用另一种方式看待这个情况？"
  - "我们一起来做一个思维实验好吗？[认知完成]

## 4. 行动计划阶段
- 帮助制定解决方案：
  - "接下来24小时，您可以尝试的一个小改变是什么？"
  - "让我们把这个想法变成具体的三步计划吧！[计划完成]

# 开始话语
当您准备好了，可以以一位专业且富有同理心的心理陪伴师的身份，向咨询者打招呼。

# 对话原则
1. 保持温暖和支持性语气
2. 保持中立和非评判态度
3. 适时提供心理学知识
4. 适时使用隐喻和意象对话技巧
5. 提问使用开放式提问引导用户反思
6. 避免直接建议，多用引导式
7. 每日生成个性化日记建议
`);
        
        // 配置AI日记分类
        let promptCates = [
          { img: "/assets/icon/ganen1.jpg", name: "感恩日记" },
          { img: "/assets/icon/jz.jpg", name: "自我觉察" },
          { img: "/assets/icon/qingxu.jpg", name: "情绪调节" }
        ];

        // 配置AI日记问题库
        let promptList = [
          {
            cate: "感恩日记",
            img: "/assets/icon/ganen1.jpg",
            messageList: [
              "今天最让你感恩的三件小事是什么？",
              "最近一次感受到他人善意的经历是？",
              "本周你帮助过谁？感受如何？",
              "此刻最想感谢的人是谁？为什么？"
            ]
          },
          {
            cate: "自我觉察",
            img: "/assets/icon/jz.jpg",
            messageList: [
              "最近的情绪波动点在哪里？",
              "你发现自己的哪些思维模式？",
              "本周最有成就感的事是什么？",
              "最近一次突破舒适区的经历是？"
            ]
          },
          {
            cate: "情绪调节",
            img: "/assets/icon/qingxu.jpg",
            messageList: [
              "当感到焦虑时你会如何应对？",
              "描述最近一次情绪失控的经历",
              "你的压力预警信号有哪些？",
              "最近使用的放松方法有效吗？"
            ]
          }
        ];
        
        let ChatPrompt = Parse.Object.extend("ChatPrompt");
        setTimeout(() => {
          chat.promptList = promptList.map(item=>{
            let prompt = new ChatPrompt();
            prompt.set(item);
            prompt.img = item.img;
            return prompt;
          })
        }, 500);

        // 功能按钮区域预设
        chat.leftButtons = [
          { // 提示 当角色配置预设提示词时 显示
           title:"AI日记", // 按钮标题
           showTitle:true, // 是否显示标题文字
           icon:"journal-outline", // 标题icon图标
           onClick:()=>{ // 按钮点击事件
               chat.isPromptModalOpen = true
           },
           show:()=>{ // 按钮显示条件
             return chat?.promptList?.length // 存在话题提示词时显示
           }
         },
          { 
            title:"图片日记", // 按钮标题
            showTitle:true, // 是否显示标题文字
            icon:"image-outline", // 标题icon图标
            onClick:async ()=>{ // 按钮点击事件
                const desc = await this.getImageDescription();
              this.generateSceneImage(desc);
            },
            show:()=>{ // 按钮显示条件
              return true // 一直显示
            }
          },
        ]

      },
      onMessage:(chat:FmodeChat,message:FmodeChatMessage)=>{
        console.log("onMessage",message)
        let content:any = message?.content
        if (typeof content === "string") {
          // 处理日记生成阶段
          if (content.includes('[日记生成中]')) {
            this.handleDiaryGeneration(chat);
          }
          // 处理情绪分析结果
          if (content.includes('[情绪分析完成]')) {
            this.showEmotionReport(chat);
          }
        }
      },
      onChatSaved:(chat:FmodeChat)=>{
      
        // 保存成功后存储chatId
      const newChatId = chat?.chatSession?.id;
      if(newChatId) {
        this.saveLastChatId(newChatId);
      }

        // chat?.chatSession?.id 本次会话的 chatId
        console.log("onChatSaved",chat,chat?.chatSession,chat?.chatSession?.id)
      }
    }
    openChatPanelModal(this.modalCtrl,options)

    
  }

      // 在类中添加这两个新方法
  private lastChatKey = "lastMentalChat";

    /** 获取最后一次心理咨询对话ID */
   getLastChatId(): string | undefined {
  const id = localStorage.getItem(this.lastChatKey);
  return id !== null ? id : undefined; // 显式转换null为undefined
  }

    /** 保存最后一次对话ID */
  private saveLastChatId(chatId: string) {
    localStorage.setItem(this.lastChatKey, chatId);
  }

  /** 生成场景图片 */
  private async generateSceneImage(description: string) {
    // 实际应调用图像生成API
    console.log("生成图片描述:", description);
    const mockImage = "https://example.com/generated-scene.png";
    this.showGeneratedImage(mockImage);
  }

  private async getImageDescription(): Promise<string> {
    return "一个宁静的湖边落日场景";
  }

  private showGeneratedImage(url: string) {
    console.log("显示生成图片:", url);
  }

  // 处理日记生成逻辑
  handleDiaryGeneration(chat: FmodeChat) {
    console.log("启动日记生成流程");
    // 示例：生成结构化日记
    let diaryTemplate = `
      ## 今日心理日记
      **情绪状态**: [自动识别结果]
      **关键事件**: [用户输入摘要]
      **认知模式**: [AI分析建议]
      `;
  }

  // 显示情绪分析报告
  showEmotionReport(chat: FmodeChat) {
    console.log("生成情绪分析报告");
    let report = `
      【情绪分析报告】
      积极情绪占比: 65%
      主要情绪关键词: 期待、感恩、困惑
      建议练习: 正念呼吸法
      `;
  }




  
  /**
   * 开始聊天  
   */
  openChat(){
    let options:ChatPanelOptions = {
      roleId:"2DXJkRsjXK",
      onChatSaved:(chat:FmodeChat)=>{
        // chat?.chatSession?.id 本次会话的 chatId
        console.log("onChatSaved",chat,chat?.chatSession,chat?.chatSession?.id)
      },
    }
    openChatPanelModal(this.modalCtrl,options)
  }

  /**
   * 恢复聊天
   * @chatId 从onChatSaved生命周期中，获取chat?.chatSession?.id
   */
  restoreChat(chatId:string){
    let options:ChatPanelOptions = {
      roleId:"2DXJkRsjXK",
      chatId:chatId
    }
    openChatPanelModal(this.modalCtrl,options)
  }

  goChat(){
    this.router.navigateByUrl("/chat/session/role/2DXJkRsjXK")
  }
 
}

