<template>
  <view class="deepMate-page">
    <!-- 顶部导航栏 -->
    <view class="header" :style="{ paddingTop: safeAreaInsets?.top + 'px' }">
      <view class="header-left">
        <image src="https://d31zlh4on95l9h.cloudfront.net/images/f91e09b5987802185e7679055dafd272.svg" class="icon"></image>
      </view>
      <view class="header-center">
        <text class="title">DeepMate</text>
      </view>
      <view class="header-right">
        <image src="https://d31zlh4on95l9h.cloudfront.net/images/d7c4e74201213a25dd9574e908233928.svg" class="icon"></image>
        <image src="https://d31zlh4on95l9h.cloudfront.net/images/099903c4aabf5713488b5cb60815e3f7.svg" class="icon"></image>
        <!-- 新增新会话按钮
        <button class="new-chat-button" @click="newChat">
          <text class="new-chat-text">新会话</text>
        </button> -->
      </view>
    </view>

    <!-- 主要内容区域 -->
    <view class="main-content">
      <!-- 机器人头像和欢迎语 -->
      <view class="robot-container" v-if="messages.length === 0">
        <image src="https://d31zlh4on95l9h.cloudfront.net/images/61fa384381c88ad80be28f41827fe0e5.svg" class="robot-avatar"></image>
        <view class="welcome-message">
          <text class="greeting">Hi, 我是您的股市随身顾问~</text>
          <text class="description">个股诊断、市场情绪解读，都可以找我。</text>
        </view>
      </view>

      <!-- 功能标签栏 -->
      <view class="function-tabs" v-if="messages.length === 0">
        <view class="tab-item ">个股诊断</view>
        <view class="tab-item">市场情绪温度计</view>
        <view class="tab-item">买卖时机提示</view>
        <view class="tab-item">个股</view>
      </view>

      <!-- 特斯拉推荐卡片 -->
      <view class="recommend-card" v-if="messages.length === 0">
        <view class="card-content">
          <image src="../../static/images/tesla-logo.png" class="logo"></image>
          <view class="card-text">
            <text class="main-question">当前特斯拉该如何布局？</text>
            <text class="stock-code">TSLA</text>
          </view>
          <image src="/static/icons/arrow-right.png" class="arrow-icon"></image>
        </view>
      </view>

      <!-- 可能感兴趣的话题 -->
      <view v-if="messages.length === 0" class="interest-section">
        <text class="section-title">- 您可能感兴趣 -</text>
        <view class="topics-list">
          <view class="topic-item" v-for="topic in hotTopics" :key="topic.id">
            <image
              :src="topic.icon"
              class="tag-icon"
            ></image>
            <text class="topic-text" @click="sendMessageList(topic.text)">{{ topic.text }}</text>
          </view>
        </view>
      </view>

      <!-- 聊天区域 -->
      <view class="chat-container" v-if="messages.length > 0">
        <view class="message-list" id="messageList">
          <view
            v-for="(message, index) in messages"
            :key="index"
            :class="
              message.isUser ? 'message user-message' : 'message bot-message'
            "
          >
            <!-- 会话图标 -->
            <text
              :class="
                message.isUser
                  ? 'fa-solid fa-user message-icon'
                  : 'fa-solid fa-robot message-icon'
              "
            ></text>
            <!-- 会话内容 -->
            <view class="message-content">
              <text class="message-text">{{ message.content }}</text>
              <!-- loading -->
              <view
                class="loading-dots"
                v-if="message.isThinking || message.isTyping"
              >
                <text class="dot"></text>
                <text class="dot"></text>
                <text class="dot"></text>
              </view>
            </view>
          </view>
        </view>
      </view>
    </view>

    <!-- 输入框区域 -->
    <view class="input-area">
      <view class="input-wrapper">
        <image src="../../static/icons/mic.png" class="mic-icon"></image>
        <input
          type="text"
          placeholder="请输入股票代码/名称，获取AI洞察"
          class="input-field"
          v-model="inputMessage"
          @confirm="sendMessage"
        />
        <button class="send-button" @click="sendMessage" :disabled="isSending">
          <image
            src="/static/icons/send.png"
            class="send-icon"
          ></image>
        </button>
      </view>
      <text class="disclaimer"
        >以上数据由AI生成，不作为最终投资建议，决策需独立！</text
      >
    </view>
  </view>
</template>

<script setup>
const { safeAreaInsets } = uni.getSystemInfoSync();

import { ref, onMounted, nextTick } from "vue";

const inputMessage = ref("");
const isSending = ref(false);
const uuid = ref("");
const messages = ref([]);
const hotTopics = ref([
  {
    id: 1,
    text: '英伟达(NVDA)股票情绪温度？',
    icon: '../../static/icons/hot-tag.png'
  },
  {
    id: 2,
    text: '博通(AVGO)明天还能涨吗？',
    icon: '../../static/icons/hot-tag.png'
  },
  {
    id: 3,
    text: '为什么Fluence Energy(FLNC)会暴涨？',
    icon: '../../static/icons/hot-tag.png'
  },
  {
    id: 4,
    text: '为什么Fluence Energy(FLNC)会暴涨？',
    icon: '../../static/icons/hot-tag.png'
  }
]);

// 初始化
onMounted(() => {
  initUUID();
  // 如果有历史消息，滚动到底部
  if (messages.value.length > 0) {
    nextTick(() => {
      scrollToBottom();
    });
  }
});

// 初始化 UUID
const initUUID = () => {
  let storedUUID = uni.getStorageSync('user_uuid');
  if (!storedUUID) {
    storedUUID = generateUUID();
    uni.setStorageSync('user_uuid', storedUUID);
  }
  uuid.value = storedUUID;
};

// 生成简单UUID
const generateUUID = () => {
  return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
    var r = Math.random() * 16 | 0,
        v = c == 'x' ? r : (r & 0x3 | 0x8);
    return v.toString(16);
  });
};

// 新会话
const newChat = () => {
  messages.value = [];
  uni.removeStorageSync('user_uuid');
  initUUID();
};

// 发送消息
const sendMessage = () => {
  if (inputMessage.value.trim() === "" || isSending.value) return;
  
  const userMessage = {
    content: inputMessage.value,
    isUser: true,
    isThinking: false,
    isTyping: false
  };
  
  messages.value.push(userMessage);
  inputMessage.value = "";
  
  // 滚动到底部
  nextTick(() => {
    scrollToBottom();
  });
  
  // 模拟机器人回复
  simulateBotResponse(userMessage.content);
};


// 发送消息
const sendMessageList = (listMessage) => {

  console.log(listMessage);
  
  
  const userMessage = {
    content: listMessage,
    isUser: true,
    isThinking: false,
    isTyping: false
  };
  
  messages.value.push(userMessage);
  inputMessage.value = "";
  
  // 滚动到底部
  nextTick(() => {
    scrollToBottom();
  });
  
  // 模拟机器人回复
  simulateBotResponse(userMessage.content);
};

// 模拟机器人回复
const simulateBotResponse = (userMessage) => {
  isSending.value = true;
  
  // 添加机器人加载消息
  const botMsg = {
    content: "",
    isUser: false,
    isTyping: true,
    isThinking: false
  };
  
  messages.value.push(botMsg);
  
  // 滚动到底部
  nextTick(() => {
    scrollToBottom();
  });
  
  // 模拟流式响应
  let responseText = `我已经收到您的消息: "${userMessage}"。作为您的股市顾问，我可以为您提供专业的投资建议。请问您想了解哪方面的信息？`;
  let index = 0;
  
  const typeWriter = () => {
    if (index < responseText.length) {
      botMsg.content += responseText.charAt(index);
      index++;
      
      // 滚动到底部
      scrollToBottom();
      
      setTimeout(typeWriter, 30);
    } else {
      botMsg.isTyping = false;
      isSending.value = false;
    }
  };
  
  setTimeout(typeWriter, 500);
};

// 滚动到底部
const scrollToBottom = () => {
  const query = uni.createSelectorQuery();
  query.select('#messageList').boundingClientRect();
  query.selectViewport().scrollOffset();
  
  query.exec((res) => {
    if (res[0] && res[1]) {
      uni.pageScrollTo({
        scrollTop: res[0].height,
        duration: 100
      });
    }
  });
};
</script>

<style scoped>
.deepMate-page {
  display: flex;
  flex-direction: column;
  height: 100vh;
  background-color: #ffffff;
  padding: 20rpx;
}

.header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 20rpx 30rpx;
  background-color: #ffffff;
}

.header-left,
.header-right {
  display: flex;
  align-items: center;
}

.header-left .icon,
.header-right .icon {
  width: 40rpx;
  height: 40rpx;
  margin-right: 20rpx;
}

.header-center .title {

  
  font-size: 36rpx;
  font-weight: bold;
  color: #333333;
}

.new-chat-button {
  background-color: #ff6600;
  border: none;
  border-radius: 8rpx;
  padding: 10rpx 20rpx;
}

.new-chat-text {
  color: white;
  font-size: 24rpx;
}

.main-content {
  flex: 1;
  padding: 30rpx;
  overflow-y: auto;
  margin-bottom: 120rpx;
}

.robot-container {
  display: flex;
  align-items: center;
  margin-bottom: 30rpx;
}

.robot-avatar {
  width: 120rpx;
  height: 120rpx;
  border-radius: 50%;
  margin-right: 20rpx;
}

.welcome-message {
  flex: 1;
}

.greeting {
  font-size: 32rpx;
  font-weight: bold;
  color: #333333;
  line-height: 48rpx;
}

.description {
  display: block;
  font-size: 26rpx;
  color: #666666;
  line-height: 36rpx;
  margin-top: 10rpx;
}

.function-tabs {
  display: flex;
  margin-bottom: 30rpx;
}

.tab-item {
  padding: 5rpx 20rpx;
  border-radius: 20rpx;
  font-size: 20rpx;
  font-weight: 700;
  color: #666666;
  background-color: #f0f0f0;
  margin-right: 20rpx;
  transition: all 0.3s;
}

.tab-item.active {
  color: #ff6600;
  background-color: #fff;
  border: 1rpx solid #ff6600;
}

.recommend-card {
  background: linear-gradient(180deg, #fee7ed 0%, #ffffff 100%);
  border-radius: 20rpx;
  padding: 30rpx;
  margin-bottom: 30rpx;
  box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.05);
}

.card-content {
  display: flex;
  align-items: center;
  justify-content: space-between;
}

.logo {
  width: 80rpx;
  height: 80rpx;
  background-color: #ff0000;
  border-radius: 10rpx;
  display: flex;
  align-items: center;
  justify-content: center;
  margin-right: 20rpx;
}

.card-text {
  flex: 1;
}

.main-question {
  font-size: 32rpx;
  color: #333333;
  line-height: 48rpx;
}

.stock-code {
  display: block;
  font-size: 24rpx;
  color: #ff3b30;
  background-color: #ffffff;
  padding: 2rpx 15rpx;
  border-radius: 12rpx;
  margin-top: 8rpx;
  width: fit-content;
  border: 1rpx solid #ff3b30;
}

.arrow-icon {
  width: 32rpx;
  height: 32rpx;
}

.interest-section {
  margin-bottom: 30rpx;
}

.section-title {
  display: block;
  text-align: center;
  font-size: 26rpx;
  color: #666666;
  margin-bottom: 20rpx;
}

.topics-list {
  display: flex;
  flex-direction: column;
  gap: 15rpx;
}

.topic-item {
  display: flex;
  align-items: center;
  padding: 15rpx 20rpx;
  background-color: #f0f0f0;
  border-radius: 15rpx;
  width: fit-content;
}

.tag-icon {
  width: 24rpx;
  height: 24rpx;
  margin-right: 10rpx;
}

.topic-text {
  font-size: 28rpx;
  color: #333333;
  flex: 1;
}

/* 聊天区域样式 */
.chat-container {
  margin-top: 30rpx;
  border-radius: 10rpx;
  height: fit-content;
  /* overflow-y: auto; */
}

.message-list {
  /* padding: 20rpx; */
}

.message {
  display: flex;
  align-items: flex-start;
  margin-bottom: 30rpx;
}

.user-message {
  flex-direction: row-reverse;
}

.message-icon {
  font-size: 24rpx;
  margin: 0 10rpx;
  padding: 10rpx;
  border-radius: 50%;
  background-color: #ddd;
  width: 40rpx;
  height: 40rpx;
  display: flex;
  align-items: center;
  justify-content: center;
}

.user-message .message-icon {
  background-color: #007aff;
  color: white;
}

.bot-message .message-icon {
  background-color: #34c759;
  color: white;
}

.message-content {
  max-width: 70%;
  position: relative;
}

.user-message .message-content {
  background-color: #007aff;
  border-radius: 10rpx;
  padding: 15rpx;
}

.bot-message .message-content {
  background-color: #f0f0f0;
  border-radius: 10rpx;
  padding: 15rpx;
}

.message-text {
  font-size: 28rpx;
  line-height: 40rpx;
}

.user-message .message-text {
  color: white;
}

.bot-message .message-text {
  color: #333;
}

.loading-dots {
  display: flex;
  align-items: center;
  padding-top: 10rpx;
}

.dot {
  width: 10rpx;
  height: 10rpx;
  background-color: #666;
  border-radius: 50%;
  margin: 0 4rpx;
  animation: loading 1.4s infinite ease-in-out both;
}

.user-message .dot {
  background-color: white;
}

.dot:nth-child(1) {
  animation-delay: -0.32s;
}

.dot:nth-child(2) {
  animation-delay: -0.16s;
}

@keyframes loading {
  0%,
  80%,
  100% {
    transform: scale(0);
  }
  40% {
    transform: scale(1);
  }
}

.input-area {
  position: fixed;
  bottom: 0;
  left: 0;
  right: 0;
  padding: 0 40rpx 80rpx 40rpx;
  background-color: #ffffff;
}

.input-wrapper {
  position: relative;
  display: flex;
  align-items: center;
  padding: 15rpx 20rpx;
  background-color: rgb(220, 31, 29);
  border-radius: 100rpx;
  box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.1);
  height: 50rpx;
}

.mic-icon {
  width: 36rpx;
  height: 36rpx;
  margin-right: 20rpx;
}

.input-field {
  flex: 1;
  font-size: 28rpx;
  color: #ffffff;
  background: none;
  border: none;
  outline: none;
}

.input-field::placeholder {
  color: #ffffff !important;
  opacity: 1;
}

.send-button {
  background: none;
  border: none;
  padding: 0;
  margin-left: 20rpx;
}

.send-icon {
  width: 36rpx;
  height: 36rpx;
}

.disclaimer {
  font-size: 15rpx;
  color: #999999;
  display: flex;
  align-items: center;
  justify-content: center;
  margin-top: 15rpx;
}
</style>