import './src/tracker'; // enregistre la tâche GPS d'arrière-plan dès le démarrage
import { Sora_400Regular, Sora_600SemiBold, Sora_700Bold, useFonts } from '@expo-google-fonts/sora';
import { StatusBar } from 'expo-status-bar';
import { useEffect, useState } from 'react';
import { ActivityIndicator, BackHandler, View } from 'react-native';
import { SafeAreaProvider } from 'react-native-safe-area-context';
import type { LineSummary } from './src/api';
import Driver from './src/screens/Driver';
import LineMap from './src/screens/LineMap';
import Lines from './src/screens/Lines';
import Login from './src/screens/Login';
import { SessionProvider, useSession } from './src/store';
import { useTheme } from './src/theme';

function Root() {
  const th = useTheme();
  const { ready, user, guest } = useSession();
  const isDriver = user?.role === 'driver' || user?.role === 'admin';
  const [line, setLine] = useState<LineSummary | null>(null);
  const [passengerView, setPassengerView] = useState(false);

  useEffect(() => { setPassengerView(false); setLine(null); }, [user?.id]);
  useEffect(() => {
    const sub = BackHandler.addEventListener('hardwareBackPress', () => {
      if (line) { setLine(null); return true; }
      if (isDriver && passengerView) { setPassengerView(false); return true; }
      return false;
    });
    return () => sub.remove();
  }, [line, isDriver, passengerView]);

  if (!ready) return <View style={{ flex: 1, backgroundColor: th.bg, justifyContent: 'center' }}><ActivityIndicator color={th.acc} /></View>;
  if (!user && !guest) return <Login />;
  if (isDriver && !passengerView) return <Driver onPassengerView={() => setPassengerView(true)} />;
  if (line) return <LineMap line={line} onBack={() => setLine(null)} />;
  return <Lines onOpen={setLine} onDriver={isDriver ? () => setPassengerView(false) : undefined} />;
}

export default function App() {
  const [fonts] = useFonts({ Sora_400Regular, Sora_600SemiBold, Sora_700Bold });
  const th = useTheme();
  return (
    <SafeAreaProvider>
      <SessionProvider>
        <StatusBar style={th.dark ? 'light' : 'dark'} />
        {fonts ? <Root /> : <View style={{ flex: 1, backgroundColor: th.bg }} />}
      </SessionProvider>
    </SafeAreaProvider>
  );
}
