/* eslint-disable @typescript-eslint/no-explicit-any */
import '../css/app.css';

import { createInertiaApp } from '@inertiajs/react';
import { createRoot } from 'react-dom/client';
import { initializeTheme } from './hooks/use-appearance';

const appName = import.meta.env.VITE_APP_NAME || 'Laravel';

// ✅ Tell TypeScript what each module returns
type PageModule = {
  default: React.ComponentType<any>;
};

// 🔥 Typed pages
const pages = import.meta.glob<PageModule>('./pages/**/*.tsx');

createInertiaApp({
  title: (title) => (title ? `${title} - ${appName}` : appName),

  resolve: async (name) => {
    // Try direct file
    const direct = pages[`./pages/${name}.tsx`];

    if (direct) {
      const module = await direct();
      return module.default;
    }

    // Try folder index
    const index = pages[`./pages/${name}/index.tsx`];

    if (index) {
      const module = await index();
      return module.default;
    }

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

  setup({ el, App, props }) {
    const root = createRoot(el);
    root.render(<App {...props} />);
  },

  progress: {
    color: '#4B5563',
  },
});

// Theme
initializeTheme();