import '../css/app.css'; // Tailwind entry (existing project stylesheet)
import './styles/admin-tokens.css';

import { createRoot } from 'react-dom/client';
import { createInertiaApp } from '@inertiajs/react';
import { AdminAuthProvider } from '@/features/admin/auth/hooks/useAdminAuth';
import { RequireAuth } from '@/features/admin/auth/components/RequireAuth';
import UserLayout from './pages/UserLayout';
import { QuizProvider } from '@/features/quiz/context';
import { QuizErrorToast } from '@/features/quiz/components';

const appName = 'Chowman Durga Puja Quiz & Win';

void createInertiaApp({
    title: (title) => (title ? `${title} - ${appName}` : appName),
    resolve: async (name) => {
        // Keep page modules out of the entry bundle. Vite emits one async chunk
        // per page (plus shared chunks), so a visit downloads only its page code.
        const pages = import.meta.glob<{ default: React.ComponentType<any> }>(
            './pages/**/*.tsx',
        );
        const page = pages[`./pages/${name}.tsx`];
        if (!page) throw new Error(`Page not found: ${name}`);
        return (await page()).default;
    },
    setup({ el, App, props }) {
        const isAdminPage = props.initialPage.component.startsWith('admin/');
        const isLoginPage = props.initialPage.component === 'admin/login';

        const root = createRoot(el);
        root.render(
            isAdminPage ? (
                <AdminAuthProvider>
                    {isLoginPage ? (
                        <App {...props} />
                    ) : (
                        <RequireAuth>
                            <App {...props} />
                        </RequireAuth>
                    )}
                </AdminAuthProvider>
            ) : (
                <QuizProvider>
                    <UserLayout>
                        <App {...props} />
                    </UserLayout>
                    <QuizErrorToast />
                </QuizProvider>
            ),
        );
    },
    progress: {
        color: '#8B0000',
    },
});
