import { Component } from '@angular/core';
import { TestChatCompletion, TestChatMessage } from '../class-chat-completion';
// 引入Parse第三方库
import * as Parse from "parse"

@Component({
  selector: 'app-page-chat', // 组件的选择器，用于在模板中引用组件
  templateUrl: './page-chat.component.html', // 组件的模板文件路径
  styleUrls: ['./page-chat.component.scss'] // 组件的样式文件路径
})
export class PageChatComponent {
  currentUser = Parse.User.current() // 当前用户对象
  currentTab: string = 'all'; // 当前选项卡的标识符
  changeTab(tab: string) {
    this.currentTab = tab;
  }

  messageList: Array<TestChatMessage> = [] // 消息列表数组
  userInput: string = "" // 用户输入的内容

  completion: TestChatCompletion | undefined // 完成对象
  constructor() {
    this.ref() // 调用ref方法加载AI定制对话的20条消息
  }

  // 加载AI定制对话的20条消息
  async ref() {
    let query = new Parse.Query('AIPet') // 创建Parse查询对象
    query.equalTo('user', Parse.User.current()?.id) // 设置查询条件，筛选出当前用户的消息
    query.descending('createdAt') // 按照创建时间降序排序
    query.limit(20) // 设置查询结果的数量上限为20条
    let request = await query.find() // 执行查询

    request.forEach(item => {
      this.messageList.push({
        role: "user",
        content: item.get('userMessage')
      }) // 将用户消息添加到消息列表中
      this.messageList.push({
        role: "assistant",
        content: item.get('aiMessage')
      }) // 将AI助手的消息添加到消息列表中
    })
  }

  send() {
    this.messageList.push({
      role: "user",
      content: this.userInput
    }) // 将用户输入的消息添加到消息列表中

    let obj = Parse.Object.extend('AIPet') // 创建Parse对象
    let AIPet = new obj() // 创建AIRecipe对象
    AIPet.set('user', {
      __type: 'Pointer',
      className: '_User',
      objectId: Parse.User.current()?.id
    }) // 设置AIRecipe对象的user字段为当前用户的指针
    AIPet.set('userMessage', this.userInput) // 设置AIPet对象的userMessage字段为用户输入的消息

    this.completion = new TestChatCompletion(this.messageList) // 创建TestChatCompletion对象，并传入消息列表
    this.completion?.createCompletionByStream(async (isComplete: Boolean) => {
      if (isComplete) {
        let currentBackMsg = this.messageList[this.messageList.length - 1]
        console.log(currentBackMsg);
        AIPet.set('aiMessage', currentBackMsg?.content) // 设置AIPet对象的aiMessage字段为AI助手的回复消息
        await AIPet.save() // 保存AIPet对象到Parse数据库
        console.log('已保存');
      }
    }) // 通过流式API创建完成对象，并传入回调函数

    this.userInput = "" // 清空用户输入
    console.log(this.messageList);
  }

  // AI计划
  planOptions: any = {
    gender: "未知",
    targets: []
  } // 计划选项对象，包含性别和目标属性
  setOption(key: string, event: any) {
    this.planOptions[key] = event.detail.value; // 更新计划选项对象的属性值
  }
  sendPlan() {
    let content = `宠物的性别:${this.planOptions.gender}，品种，年龄：，体重，
    信息：${this.planOptions.targets?.join(";")}
    补充：
    请扮演符合上述信息既可爱又体贴的宠物陪伴我聊天
    ` // 构建计划的内容字符串
    console.log(content)
    return
    this.messageList.push({
      role: "user",
      content: content
    }) // 将计划的内容添加到消息列表中
    this.completion = new TestChatCompletion(this.messageList) // 创建TestChatCompletion对象，并传入消息列表
    this.completion?.createCompletionByStream() // 通过流式API创建完成对象
    this.userInput = "" // 清空用户输入
  }
}
