import React, { useState, useRef, useEffect } from 'react'; import { Send, Mic, MicOff, ChevronLeft, MoreVertical, Headphones, PhoneOff, Volume2, VolumeX } from 'lucide-react'; import { Message, Character } from '../types'; interface InteractionProps { character: Character | null; onBack: () => void; } const Interaction: React.FC = ({ character, onBack }) => { const [messages, setMessages] = useState([]); const [inputValue, setInputValue] = useState(''); const [isVoiceMode, setIsVoiceMode] = useState(false); const [isMicMuted, setIsMicMuted] = useState(false); const [isSpeakerOn, setIsSpeakerOn] = useState(true); const scrollRef = useRef(null); useEffect(() => { if (character) { setMessages([ { id: 'init', text: character.description ? `${character.description}\n\n指挥官,${character.name} 已就位。` : '连接建立。', sender: 'ai', type: 'text', timestamp: Date.now(), } ]); } }, [character]); useEffect(() => { if (scrollRef.current) { scrollRef.current.scrollTop = scrollRef.current.scrollHeight; } }, [messages]); const handleSend = () => { if (!inputValue.trim()) return; const newMsg: Message = { id: Date.now().toString(), text: inputValue, sender: 'user', type: 'text', timestamp: Date.now(), }; setMessages(prev => [...prev, newMsg]); setInputValue(''); setTimeout(() => { const aiMsg: Message = { id: (Date.now() + 1).toString(), text: '收到反馈。硬件同步率正在上升...', sender: 'ai', type: 'text', timestamp: Date.now(), }; setMessages(prev => [...prev, aiMsg]); }, 1500); }; if (isVoiceMode && character) { return (

{character.name}

{isMicMuted ? 'Mic Muted' : 'Listening...'}

{!isMicMuted && ( <>
)}
{[...Array(5)].map((_, i) => (
))}
); } if (!character) return null; return (
{/* Background */}
AI Character
{/* Header */}

{character.name}

{character.tagline}
{/* Chat Area */}
{messages.map((msg) => (
{msg.sender === 'ai' && (
)}
{msg.type === 'text' &&

{msg.text}

}
))}
{/* Input Area */}
setInputValue(e.target.value)} placeholder="输入指令..." className="bg-transparent w-full text-sm text-white placeholder-white/40 focus:outline-none" onKeyDown={(e) => e.key === 'Enter' && handleSend()} />
); }; export default Interaction;