import React, { useEffect, useState } from 'react'; import { StatusBar } from 'expo-status-bar'; import { View, Text, StyleSheet, ActivityIndicator } from 'react-native'; import { SafeAreaProvider } from 'react-native-safe-area-context'; import 'react-native-gesture-handler'; import { AppNavigator } from './src/navigation'; import { AuthProvider } from './src/contexts/AuthContext'; import { openDatabase } from './src/lib/db'; import { seedGlazeCatalog } from './src/lib/db/repositories'; import { analytics } from './src/lib/analytics'; import { colors } from './src/lib/theme'; export default function App() { const [isReady, setIsReady] = useState(false); const [error, setError] = useState(null); useEffect(() => { initializeApp(); }, []); const initializeApp = async () => { try { // Initialize database await openDatabase(); // Seed glaze catalog if not already seeded await seedGlazeCatalog(); // Initialize analytics await analytics.initialize(); // Track app open analytics.appOpen(true); setIsReady(true); } catch (err) { console.error('Failed to initialize app:', err); setError(err instanceof Error ? err.message : 'Unknown error'); } }; if (error) { return ( Failed to initialize app {error} ); } if (!isReady) { return ( Loading... ); } return ( ); } const styles = StyleSheet.create({ container: { flex: 1, backgroundColor: colors.background, alignItems: 'center', justifyContent: 'center', }, loadingText: { marginTop: 16, fontSize: 16, color: colors.textSecondary, }, errorText: { fontSize: 18, fontWeight: '600', color: colors.error, marginBottom: 8, }, errorDetail: { fontSize: 14, color: colors.textSecondary, textAlign: 'center', paddingHorizontal: 32, }, });