import "./index.css"

import { StrictMode } from "react";
import { createRoot } from "react-dom/client";
import { BrowserRouter, Routes, Route, Navigate } from "react-router-dom";

import { AppProvider } from "./state/AppState.jsx";
import { PlayerProvider } from "./state/Player.jsx";
import AuthPage from "./pages/Auth.jsx";
import {
    AppLayout,
    FavoritesPage,
    GuidePage,
    LiveTVPage,
    MoviesPage,
    ProfilesPage,
    ProvidersPage,
    RequireAuth,
    RequireProfile,
    RequireProvider,
    ShowsPage,
} from "./pages/Pages.jsx";

createRoot(document.getElementById("root")).render(
    <StrictMode>
        <BrowserRouter>
            <AppProvider>
                <PlayerProvider>
                    <Routes>
                        <Route path="/login" element={<AuthPage />} />

                        {/* Signed in */}
                        <Route element={<RequireAuth />}>
                            <Route path="/profiles" element={<ProfilesPage />} />

                            {/* A profile is chosen */}
                            <Route element={<RequireProfile />}>
                                <Route element={<AppLayout />}>
                                    <Route path="/providers" element={<ProvidersPage />} />

                                    {/* The profile has a provider */}
                                    <Route element={<RequireProvider />}>
                                        <Route path="/" element={<Navigate to="/tv" replace />} />
                                        <Route path="/tv" element={<LiveTVPage />} />
                                        <Route path="/guide" element={<GuidePage />} />
                                        <Route path="/movies" element={<MoviesPage />} />
                                        <Route path="/shows" element={<ShowsPage />} />
                                        <Route path="/favorites" element={<FavoritesPage />} />
                                    </Route>
                                </Route>
                            </Route>
                        </Route>

                        <Route path="*" element={<Navigate to="/" replace />} />
                    </Routes>
                </PlayerProvider>
            </AppProvider>
        </BrowserRouter>
    </StrictMode>
);
