import { useState, useEffect, useRef } from 'react'

interface UseTypingEffectProps {
  text: string
  speed?: number // 打字速度（毫秒）
  enabled?: boolean // 是否启用打字效果
}

export const useTypingEffect = ({ text, speed = 30, enabled = true }: UseTypingEffectProps) => {
  const [displayedText, setDisplayedText] = useState('')
  const [isTyping, setIsTyping] = useState(false)
  const intervalRef = useRef<NodeJS.Timeout | null>(null)

  useEffect(() => {
    // 如果没有启用打字效果，直接显示完整文本
    if (!enabled) {
      setDisplayedText(text)
      setIsTyping(false)
      return
    }

    // 如果文本为空，清空显示
    if (!text) {
      setDisplayedText('')
      setIsTyping(false)
      return
    }

    // 清除之前的定时器
    if (intervalRef.current) {
      clearInterval(intervalRef.current)
    }

    // 重置状态
    setDisplayedText('')
    setIsTyping(true)

    let currentIndex = 0

    intervalRef.current = setInterval(() => {
      if (currentIndex < text.length) {
        setDisplayedText(text.slice(0, currentIndex + 1))
        currentIndex++
      } else {
        // 打字完成
        clearInterval(intervalRef.current!)
        setIsTyping(false)
      }
    }, speed)

    // 清理函数
    return () => {
      if (intervalRef.current) {
        clearInterval(intervalRef.current)
      }
    }
  }, [text, speed, enabled])

  // 组件卸载时清理定时器
  useEffect(() => {
    return () => {
      if (intervalRef.current) {
        clearInterval(intervalRef.current)
      }
    }
  }, [])

  return {
    displayedText,
    isTyping,
  }
}
