import { defineConfig } from 'vite'
import laravel from 'laravel-vite-plugin'
import react from '@vitejs/plugin-react'
import path from 'path'

// ✅ absolute path to your deepmerge shim
const deepmergeShimPath = path.resolve(__dirname, 'resources/js/shims/deepmerge-shim.mjs')

console.log('🧩 Building with deepmerge alias:', deepmergeShimPath)

export default defineConfig({
  plugins: [
    laravel({
      input: ['resources/css/app.css', 'resources/js/app.tsx'],
      ssr: 'resources/js/ssr.tsx', // ✅ handles SSR automatically
      refresh: true,
    }),
    react(),
  ],
  build: {
    minify: 'esbuild', // 🔧 Fixes "Cannot access 'Vl' before initialization" bug
  },

  // ✅ SSR build configuration
  ssr: {
    noExternal: [
      // ✅ Core
      'ziggy-js',
      'reselect',
      'deepmerge',
      '@mui/utils',

      // ✅ React icons
      'react-icons',
      'react-icons/md',
      'react-icons/fi',
      'react-icons/fa',
      'react-icons/hi',
      'react-icons/io',
      'react-icons/io5',
      'react-icons/ri',

      // ✅ MUI + Emotion
      '@mui/material',
      '@mui/material/styles',
      '@mui/system',
      '@mui/icons-material',
      '@mui/x-data-grid',
      '@mui/styled-engine',
      '@emotion/react',
      '@emotion/styled',
      '@emotion/cache',

      // ✅ Calendar libs
      '@fullcalendar/core',
      '@fullcalendar/react',
      '@fullcalendar/daygrid',
      '@fullcalendar/timegrid',
    ],

    // ✅ Force shim to stay external (avoid Object.freeze wrapping)
    external: [deepmergeShimPath],
  },

  optimizeDeps: {
    include: [
      'reselect',
      'deepmerge',
      'framer-motion',
      '@mui/utils',
      '@mui/material',
      '@mui/material/styles',
      '@mui/icons-material',
      '@mui/system',
      '@mui/styled-engine',
      '@mui/x-data-grid',
      '@emotion/react',
      '@emotion/styled',
      '@emotion/cache',
    ],

    // ✅ Exclude MUI’s internal deepmerge from prebundling
    exclude: ['@mui/utils/deepmerge', 'deepmerge'],
  },

  resolve: {
    alias: {
      '@': path.resolve(__dirname, 'resources/js'),
      '@mui/utils/deepmerge': deepmergeShimPath,
    },
  },
})
