import React, { useCallback, useState } from "react"; import { Pressable, Text, View } from "react-native"; import { SafeAreaView } from "react-native-safe-area-context"; import { router } from "expo-router"; import { useChat } from "../contexts/ChatContext"; import { useConnection } from "../contexts/ConnectionContext"; import { MessageList } from "../components/chat/MessageList"; import { InputBar } from "../components/chat/InputBar"; import { CommandBar, TextModeCommandBar } from "../components/chat/CommandBar"; import { StatusDot } from "../components/ui/StatusDot"; import { SessionPicker } from "../components/SessionPicker"; import { playAudio } from "../services/audio"; export default function ChatScreen() { const { messages, sendTextMessage, clearMessages, requestScreenshot } = useChat(); const { status } = useConnection(); const [isTextMode, setIsTextMode] = useState(false); const [showSessions, setShowSessions] = useState(false); const handleSessions = useCallback(() => { setShowSessions(true); }, []); const handleScreenshot = useCallback(() => { requestScreenshot(); router.push("/navigate"); }, [requestScreenshot]); const handleHelp = useCallback(() => { sendTextMessage("/h"); }, [sendTextMessage]); const handleNavigate = useCallback(() => { router.push("/navigate"); }, []); const handleClear = useCallback(() => { clearMessages(); }, [clearMessages]); const handleReplay = useCallback(() => { for (let i = messages.length - 1; i >= 0; i--) { const msg = messages[i]; if (msg.role === "assistant") { if (msg.audioUri) { playAudio(msg.audioUri).catch(() => {}); } return; } } }, [messages]); return ( {/* Header */} PAILot router.push("/settings")} hitSlop={{ top: 6, bottom: 6, left: 6, right: 6 }} style={{ width: 36, height: 36, alignItems: "center", justifyContent: "center", borderRadius: 18, backgroundColor: "#1E1E2E", }} > ⚙️ {/* Message list */} {messages.length === 0 ? ( 🛩 PAILot Voice-first AI communicator.{"\n"}Tap the mic to start talking. ) : ( )} {/* Command bar */} {isTextMode ? ( ) : ( )} {/* Input bar */} setIsTextMode((v) => !v)} /> {/* Session picker modal */} setShowSessions(false)} /> ); }