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) {
        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, '')
          };
        }
      }
      }
    ],
    ssr: {
      noExternal: ['@/utils/logger']
    },
    base: './',
    publicDir: 'public',
  });
});