import React, { useCallback, useEffect, useState, } from 'react'; import { ActivityIndicator, View, Alert, Platform, PermissionsAndroid } from 'react-native'; import {WebView} from 'react-native-webview'; import { styles } from './wrapper.styles'; import {urls} from '@config' import { WrapperProps } from './wrapper.props'; import BootSplash from 'react-native-bootsplash'; import keychainService from '../../services/keychainService'; import storageService from '../../services/storageService'; import biometricService from '../../services/biometricService'; import useBiometric from '../../hooks/useBiometric'; import { LoginScreen, SignupScreen, ForgotPasswordScreen } from '@features'; export function Wrapper({ style }: WrapperProps) { const [loading, setLoading] = useState(true); const [authenticated, setAuthenticated] = useState(false); const [currentScreen, setCurrentScreen] = useState<'login' | 'signup' | 'forgotPassword'>('login'); const { authenticate } = useBiometric(); const handleAuthSuccess = useCallback(async (token: string) => { await keychainService.saveToken(token); try { const bioAvailability = await biometricService.isAvailable(); if (bioAvailability.available) { Alert.alert( 'Enable Biometric Login', `Would you like to enable ${bioAvailability.biometryType} login for faster access next time?`, [ { text: 'No', onPress: () => setAuthenticated(true), style: 'cancel', }, { text: 'Yes', onPress: async () => { await storageService.setBiometricEnabled(true); setAuthenticated(true); }, }, ], { cancelable: false } ); } else { setAuthenticated(true); } } catch (error) { console.log('Error checking biometric availability during login:', error); setAuthenticated(true); } }, []); const initialize = useCallback(async () => { try { const token = await keychainService.getToken(); if (!token) { // No token – render LoginScreen later setAuthenticated(false); setLoading(false); return; } const biometricEnabled = await storageService.isBiometricEnabled(); if (!biometricEnabled) { setAuthenticated(true); return; } const success = await authenticate(); if (success) { setAuthenticated(true); } } finally { setLoading(false); BootSplash.hide({ fade: true, }); } }, [authenticate]); useEffect(() => { initialize(); }, [initialize]); useEffect(() => { if (authenticated) { const requestPermissions = async () => { if (Platform.OS === 'android') { try { await PermissionsAndroid.requestMultiple([ PermissionsAndroid.PERMISSIONS.RECORD_AUDIO, PermissionsAndroid.PERMISSIONS.CAMERA, ]); } catch (err) { console.warn(err); } } }; requestPermissions(); } }, [authenticated]); if (loading) { return ( ); } if (!authenticated) { if (currentScreen === 'signup') { return ( { setCurrentScreen('login'); }} /> ); } if (currentScreen === 'forgotPassword') { return ( { // Alert removed setCurrentScreen('login'); }} onSignInPress={() => { setCurrentScreen('login'); }} /> ); } return ( { setCurrentScreen('forgotPassword'); }} onCreateAccount={() => { setCurrentScreen('signup'); }} /> ); } return ( ); }