import { useEffect, useContext } from 'react'
import { useGetIMUserInfo } from '@/hooks/useIm'
import { useAtomValue } from 'jotai'
import { selectedConversationIdAtom } from '@/atoms/im'
import NimMsgContext from '@/context/NimChat/NimMsgContext'
import { useNimChat } from '@/context/NimChat/useNimChat'

interface UsePrologueMessageOptions {
  hasLoadedOnce: boolean
  messageCount: number
  hasSentPrologue: boolean
  isInitialLoad: boolean
  aiId: number
  hasConfirmedNoHistory: boolean
  updatePrologueStatus: (sent: boolean) => void
}

export function usePrologueMessage({
  hasLoadedOnce,
  messageCount,
  hasSentPrologue,
  isInitialLoad,
  aiId,
  hasConfirmedNoHistory,
  updatePrologueStatus,
}: UsePrologueMessageOptions) {
  // 获取 AI 基础信息，从中获取开场白内容
  const { data: aiUserInfo } = useGetIMUserInfo({ aiId })

  // 获取当前选中的会话ID
  const selectedConversationId = useAtomValue(selectedConversationIdAtom)

  // 获取 NIM 消息上下文
  const { addMsg } = useContext(NimMsgContext)
  const { nim } = useNimChat()

  // 自动模拟开场白消息
  useEffect(() => {
    // 检查是否满足发送开场白的条件：
    // 1. 已经完成过至少一次加载（hasLoadedOnce为true）
    // 2. 消息列表为空
    // 3. 还没有发送过开场白
    // 4. 不是初始加载状态
    // 5. 有有效的aiId
    // 6. 已确认没有历史消息（hasConfirmedNoHistory为false，表示确认没有历史消息）
    // 7. 有开场白内容
    // 8. 有选中的会话ID
    // 9. 有 NIM 实例和消息上下文
    const shouldSendPrologue =
      hasLoadedOnce &&
      messageCount === 0 &&
      !hasSentPrologue &&
      !isInitialLoad &&
      aiId &&
      !hasConfirmedNoHistory &&
      aiUserInfo?.dialoguePrologue &&
      selectedConversationId &&
      nim &&
      addMsg

    if (shouldSendPrologue) {
      if (process.env.NODE_ENV === 'development') {
        console.log('🚀 准备自动模拟开场白消息，aiId:', aiId, {
          hasLoadedOnce,
          messageCount,
          hasSentPrologue,
          isInitialLoad,
          hasConfirmedNoHistory,
          dialoguePrologue: aiUserInfo?.dialoguePrologue,
        })
      }

      // 标记已发送，防止重复发送
      updatePrologueStatus(true)

      try {
        // 获取 AI 用户 ID（会话目标 ID）
        const aiUserId =
          nim.V2NIMConversationIdUtil.parseConversationTargetId(selectedConversationId)

        // 创建模拟的开场白消息
        const prologueMessage = nim.V2NIMMessageCreator.createTextMessage(
          aiUserInfo.dialoguePrologue!
        )

        // 设置消息属性
        prologueMessage.senderId = aiUserId // 设置发送者为 AI
        const currentUser = nim.V2NIMLoginService.getLoginUser()
        prologueMessage.receiverId = currentUser || '' // 设置接收者为当前用户
        prologueMessage.conversationId = selectedConversationId
        prologueMessage.messageType = 0 // TEXT 消息类型
        prologueMessage.createTime = Date.now()
        prologueMessage.sendingState = 0 // 已发送状态
        prologueMessage.messageClientId = `prologue_${aiId}_${Date.now()}`

        // 添加消息到消息列表，标记为新消息以触发打字效果
        addMsg(selectedConversationId, [prologueMessage], true)

        if (process.env.NODE_ENV === 'development') {
          console.log('✅ 开场白消息模拟成功', prologueMessage)
        }
      } catch (error) {
        console.error('❌ 模拟开场白消息失败:', error)
      }
    }
  }, [
    hasLoadedOnce,
    messageCount,
    hasSentPrologue,
    isInitialLoad,
    aiId,
    hasConfirmedNoHistory,
    aiUserInfo?.dialoguePrologue,
    selectedConversationId,
    nim,
    addMsg,
    updatePrologueStatus,
  ])
}
