import AppToaster from '@admin/components/app-toaster';
import { createInertiaApp, router } from '@inertiajs/react';
import 'react-date-range/dist/styles.css';
import 'react-date-range/dist/theme/default.css';
import { createRoot } from 'react-dom/client';
import '../css/app.css';

import { initializeTheme } from './hooks/use-appearance';
import { initializeColors } from './hooks/use-colors';
import { initializeFont } from './hooks/use-font';

import axios from 'axios';

// ---------------------------------------------------------
// 🚀 FIX: Correct CSRF handling for Laravel + Inertia + Tenancy
// ---------------------------------------------------------
axios.defaults.withCredentials = true;
axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';

// ---------------------------------------------------------
// Inertia Page Loader
// ---------------------------------------------------------
const appName = (window as any).APP_NAME || import.meta.env.VITE_APP_NAME || 'Admin';

const appPages = import.meta.glob('./pages/**/*.tsx');

const modulePages = {
    Website: import.meta.glob('/Website/**/resources/assets/js/pages/**/*.tsx'),
};

// ---------------------------------------------------------
// Create Inertia App
// ---------------------------------------------------------
createInertiaApp({
    title: (title) => (title ? `${title} - ${appName}` : appName),

    resolve: async (name) => {
        // Search module pages
        for (const [moduleName, pages] of Object.entries(modulePages)) {
            const pageKey = Object.keys(pages).find((path) =>
                path.endsWith(`/pages/${name}.tsx`)
            );

            if (pageKey) {
                console.log('✅ Module page loaded:', pageKey);
                const page = await pages[pageKey]();
                return page.default;
            }
        }

        // Fallback to main app pages
        const appKey = `./pages/${name}.tsx`;

        if (appPages[appKey]) {
            const page = await appPages[appKey]();
            return page.default;
        }

        throw new Error(`❌ Page not found: ${name}`);
    },

    setup({ el, App, props }) {
        createRoot(el).render(
            <div className="mx-auto w-full max-w-[1920px]">
                <App {...props} />
                <AppToaster />
            </div>
        );
    },
})
    .then(() => console.log("Inertia App initialized ✅"))
    .catch((error) => console.error("Inertia init failed ❌", error));

// ---------------------------------------------------------
// Initialize theme/font/colors
// ---------------------------------------------------------
initializeTheme();
initializeFont();
initializeColors();
