import React, { useState, useEffect } from 'react'; import { StyleSheet, View, SafeAreaView, StatusBar } from 'react-native'; import { GestureHandlerRootView } from 'react-native-gesture-handler'; import CameraScreen from './src/screens/CameraScreen'; import PreviewScreen from './src/screens/PreviewScreen'; import AdminScreen from './src/screens/AdminScreen'; import { loadSettings, AppSettings } from './src/services/settings'; import KioskMode from './modules/kiosk-mode'; type ScreenState = 'home' | 'camera' | 'preview' | 'admin'; export default function App() { const [currentScreen, setCurrentScreen] = useState('home'); const [photoUris, setPhotoUris] = useState([]); const [settings, setSettings] = useState(null); // 1. Load configuration settings on app start useEffect(() => { async function initApp() { const savedSettings = await loadSettings(); setSettings(savedSettings); // Auto-start Kiosk mode if it was configured as enabled if (savedSettings.kioskModeEnabled) { try { KioskMode.startKiosk(); } catch (e) { console.warn('Failed to auto-start Kiosk mode:', e); } } } initApp(); }, []); if (!settings) { return ; } // 2. Navigation Actions const handleStartBooth = () => { setPhotoUris([]); setCurrentScreen('camera'); }; const handlePhotoCaptured = (uri: string) => { setPhotoUris((prev) => [...prev, uri]); setCurrentScreen('preview'); }; // Called by CameraScreen when burst mode completes all photos const handleBurstComplete = (uris: string[]) => { setPhotoUris((prev) => [...prev, ...uris]); setCurrentScreen('preview'); }; const handleRetakeLast = () => { // Remove last captured photo const updatedUris = [...photoUris]; updatedUris.pop(); setPhotoUris(updatedUris); // Always let user retake setCurrentScreen('camera'); }; const handleAddAnother = () => { setCurrentScreen('camera'); }; const handleReset = () => { setPhotoUris([]); setCurrentScreen('home'); }; const handleSaveSettings = (updated: AppSettings) => { setSettings(updated); }; const handleOpenAdmin = () => { setCurrentScreen('admin'); }; // 3. Conditional Screen Rendering const renderScreen = () => { switch (currentScreen) { case 'camera': return ( ); case 'preview': return ( ); case 'admin': return ( setCurrentScreen('home')} /> ); default: return ( ); } }; return ( ); } const styles = StyleSheet.create({ container: { flex: 1, backgroundColor: '#050510', }, loadingContainer: { flex: 1, backgroundColor: '#050510', justifyContent: 'center', alignItems: 'center', }, });