import { defineConfig, mergeConfig } from "vite";
import { createBuildConfig } from "./vite.config.common.mts";
import path from 'path';

export default defineConfig(async () => {
  const baseConfig = await createBuildConfig('electron');
  
  return mergeConfig(baseConfig, {
    build: {
      outDir: 'dist-electron',
      rollupOptions: {
        input: {
          main: path.resolve(__dirname, 'src/electron/main.ts'),
          preload: path.resolve(__dirname, 'src/electron/preload.js'),
        },
        external: ['electron'],
        output: {
          format: 'cjs',
          entryFileNames: '[name].js',
          assetFileNames: 'assets/[name].[ext]',
        },
      },
      target: 'node18',
      minify: false,
      sourcemap: true,
    },
    resolve: {
      alias: {
        '@': path.resolve(__dirname, 'src'),
      },
    },
    optimizeDeps: {
      include: ['@/utils/logger']
    },
    plugins: [
      {
        name: 'typescript-transform',
        transform(code: string, id: string) {
          if (id.endsWith('main.ts')) {
            // Replace the logger import with inline logger
            return code.replace(
              /import\s*{\s*logger\s*}\s*from\s*['"]@\/utils\/logger['"];?/,
              `const logger = {
                log: (...args) => console.log(...args),
                error: (...args) => console.error(...args),
                info: (...args) => console.info(...args),
                warn: (...args) => console.warn(...args),
                debug: (...args) => console.debug(...args),
              };`
            );
          }
          return code;
        }
      },
      {
        name: 'remove-sw-imports',
        transform(code: string, id: string) {
          // Remove service worker imports and registrations
          if (id.includes('registerServiceWorker') || 
              id.includes('register-service-worker') || 
              id.includes('sw_scripts') || 
              id.includes('PushNotificationPermission') || 
              code.includes('navigator.serviceWorker')) {
            return {
              code: code
                .replace(/import.*registerServiceWorker.*$/mg, '')
                .replace(/import.*register-service-worker.*$/mg, '')
                .replace(/navigator\.serviceWorker/g, 'undefined')
                .replace(/if\s*\([^)]*serviceWorker[^)]*\)\s*{[^}]*}/g, '')
                .replace(/import.*workbox.*$/mg, '')
                .replace(/importScripts\([^)]*\)/g, '')
            };
          }
          return code;
        }
      },
      {
        name: 'remove-sw-files',
        enforce: 'pre',
        resolveId(id: string) {
          // Prevent service worker files from being included
          if (id.includes('sw.js') || 
              id.includes('workbox') || 
              id.includes('registerSW.js') || 
              id.includes('manifest.webmanifest')) {
            return '\0empty';
          }
          return null;
        },
        load(id: string) {
          if (id === '\0empty') {
            return 'export default {}';
          }
          return null;
        }
      }
    ],
    ssr: {
      noExternal: ['@/utils/logger']
    },
    base: './',
    publicDir: 'public',
  });
});