import { useEffect, useState } from 'react'; import { StatusBar } from 'expo-status-bar'; import type { ChatMessage } from './src/api/client'; import { getAccessToken } from './src/auth/session'; import { ChatScreen } from './src/screens/ChatScreen'; import { PaywallScreen } from './src/screens/PaywallScreen'; /** * Two views, no navigation library. The user lands directly in the chat — * no registration before the first question. The backend decides the paywall * moment (the analysis is ready); after unlock the conversation continues * with the full analysis delivered immediately. */ export default function App() { const [view, setView] = useState<'chat' | 'paywall'>('chat'); const [messages, setMessages] = useState([]); const [paywalled, setPaywalled] = useState(false); const [deliverAnalysis, setDeliverAnalysis] = useState(false); const [signedIn, setSignedIn] = useState(false); useEffect(() => { getAccessToken().then((token) => setSignedIn(token !== null)); }, []); function resetToSignedOut() { setSignedIn(false); setMessages([]); setPaywalled(false); setDeliverAnalysis(false); setView('chat'); } return ( <> {view === 'chat' && ( setPaywalled(true)} onContinueWithPremium={() => setView('paywall')} deliverAnalysis={deliverAnalysis} onAnalysisDelivered={() => setDeliverAnalysis(false)} signedIn={signedIn} onSignedOut={resetToSignedOut} /> )} {view === 'paywall' && ( { setSignedIn(true); setPaywalled(false); setDeliverAnalysis(true); setView('chat'); }} onDismiss={() => setView('chat')} /> )} ); }