<template>
  <div class="input-area">
    <div class="shortcut-container flex">
      <div
        class="shortcut-item flex flex-center"
        v-for="item in shortcutList"
        :key="item"
        @click="handleShortcut(item)"
      >
        {{ item }}
      </div>
    </div>
    <div class="input-container">
      <!-- 加号图标 -->
      <div class="icon-wrapper">
        <SvgIcon name="plus" size="40" />
      </div>

      <!-- 分隔线 -->
      <div class="divider"></div>

      <!-- 正常状态：显示输入框 -->
      <div class="input-wrapper">
        <input
          id="textarea"
          v-show="!isRecording"
          v-model="inputValue"
          type="text"
          placeholder="Ask anything about your desired outfit"
          class="text-input"
          @keyup.enter="handleSend"
        />
        <div v-show="isRecording" class="recording-wrapper">
          <!-- <div class="recording-animation"> -->
          <AudioVisualizer />
          <!-- </div> -->
        </div>
      </div>

      <!-- 语音图标 -->
      <div class="icon-wrapper" v-show="!isRecording" @click="handleClickAudio">
        <SvgIcon name="audio" size="52" />
      </div>

      <!-- 发送图标 -->
      <div class="icon-wrapper send-icon" @click="handleSend">
        <SvgIcon name="send" size="46" />
      </div>
    </div>
  </div>
</template>

<script setup lang="ts">
import { ref, onUnmounted } from 'vue'
import AudioVisualizer from './AudioVisualizer.vue'

const emit = defineEmits(['send-message'])

const inputValue = ref<string>('')
const isRecording = ref<boolean>(false)
const shortcutList: string[] = [
  'Suggest shoe styles',
  'Recommend evening bags',
  'Suggest accessory combinations',
  'Suggest color combinations',
  'Suggest fabric combinations',
  'Suggest style combinations'
]

const handleSend = (): void => {
  if (inputValue.value.trim()) {
    console.log('input发送消息:', inputValue.value)
    emit('send-message', inputValue.value)
    inputValue.value = ''
  }
}

const handleShortcut = (item: string): void => {
  inputValue.value = item
}

// 语音识别相关变量
let speechRecognition = null
let lastTranscript = '' // 用于防重复

onUnmounted(() => {
  if (speechRecognition) {
    speechRecognition = null
  }
})

const handleClickAudio = (): void => {
  isRecording.value = !isRecording.value

  if (isRecording.value) {
    startRecording()
  } else {
    stopRecording()
  }
}

// 开始语音识别
const startRecording = () => {
  if (!speechRecognition) {
    // 检查浏览器支持
    if (!('webkitSpeechRecognition' in window) && !('SpeechRecognition' in window)) {
      alert('您的浏览器不支持语音识别功能')
      return
    }

    // 创建语音识别对象
    const SpeechRecognition =
      (window as any).SpeechRecognition || (window as any).webkitSpeechRecognition
    speechRecognition = new SpeechRecognition()

    // 配置参数
    speechRecognition.continuous = true
    speechRecognition.interimResults = true
    speechRecognition.lang = 'zh-CN' // 设置为中文
  }

  // 识别开始
  speechRecognition.onstart = () => {
    console.log('开始语音识别')
    isRecording.value = true
  }

  // 识别结果
  speechRecognition.onresult = (event) => {
    let finalTranscript = ''
    let interimTranscript = ''

    // 处理所有识别结果
    for (let i = event.resultIndex; i < event.results.length; i++) {
      const transcript = event.results[i][0].transcript
      if (event.results[i].isFinal) {
        finalTranscript += transcript
      } else {
        interimTranscript += transcript
      }
    }

    // 只处理最终结果，避免重复
    if (finalTranscript && finalTranscript !== lastTranscript) {
      console.log('最终识别结果:', finalTranscript)
      lastTranscript = finalTranscript

      // 将识别结果填入输入框并发送
      inputValue.value = finalTranscript
      // emit('send-message', finalTranscript)
    }

    // 显示临时结果（可选）
    if (interimTranscript) {
      console.log('临时识别结果:', interimTranscript)
    }
  }

  // 识别结束
  speechRecognition.onend = () => {
    console.log('语音识别结束')
    isRecording.value = false
    // 清空防重复变量
    lastTranscript = ''
  }

  // 识别错误
  speechRecognition.onerror = (event) => {
    console.error('语音识别错误:', event.error)
    isRecording.value = false
    alert('语音识别失败，请重试')
  }

  // 开始识别
  speechRecognition.start()
}

// 停止语音识别
const stopRecording = () => {
  if (speechRecognition && isRecording.value) {
    speechRecognition.stop()
    isRecording.value = false
  }
}
</script>

<style lang="less" scoped>
.input-area {
  background-color: #fff;
}
.shortcut-container {
  overflow-x: auto;
  flex-wrap: nowrap;
  padding: 0 4.4rem;
  column-gap: 1.2rem;
  margin-bottom: 2.84rem;
  &::-webkit-scrollbar {
    display: none;
  }
  .shortcut-item {
    font-size: 4.2rem;
    width: fit-content;
    font-family: 'robotoBold';
    white-space: nowrap;
    height: 8.1rem;
    line-height: 8.1rem;
    padding: 2.2rem 2.8rem;
    color: #6d6868;
    background-color: #efefef;
    border-radius: 2rem;
  }
}

.input-container {
  display: flex;
  align-items: center;
  background-color: #efefef;
  padding: 0 4.85rem 0 5.2rem;
  height: 19.3rem;
}

.icon-wrapper {
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;

  &.send-icon {
    margin-left: 4.38rem;
  }
}

.divider {
  width: 2px;
  height: 14.9rem;
  margin-left: 5.59rem;
  margin-right: 3.5rem;
  background-color: #888;
}

.input-wrapper {
  flex: 1;
  display: flex;
  align-items: center;
  overflow: hidden;
  // height: 100%;
}

.text-input {
  width: 100%;
  // height: 100%;
  height: auto;
  // min-height: 4.8rem;
  // max-height: 100%;
  border: none;
  outline: none;
  background: transparent;
  font-size: 4rem;
  font-family: 'robotoBold';
  font-weight: 400;
  line-height: 121%;
  // padding-right: 2rem;
  margin-right: 4.21rem;
  color: #000;
  // resize: none;

  &::placeholder {
    color: #888;
    letter-spacing: -0.01em;
    font-weight: 400;
    font-family: 'robotoBold';
    word-spacing: -5px;
    line-height: 4.8rem;
  }
}

// 确保图标颜色为 #6d6868
:deep(.svg-icon) {
  color: #6d6868;

  svg {
    fill: #6d6868;
  }
}

// 录制状态样式
.recording-wrapper {
  flex: 1;
  display: flex;
  align-items: center;
}

.recording-animation {
  width: 100%;
  height: 100%;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 1.5rem;
}

.recording-text {
  font-family: 'robotoBold';
  font-size: 2.8rem;
  color: #6d6868;
  letter-spacing: 0.02em;
}
</style>
