import cp from 'vite-plugin-cp'
import './scripts/gen-version'
import path from 'node:path'

const external = [
  'silk-wasm',
  'ws',
  'level',
  'classic-level',
  'abstract-level',
  'level-supports',
  'level-transcoder',
  'module-error',
  'catering',
  'node-gyp-build',
]

function genCpModule(module: string) {
  return { src: `./node_modules/${module}`, dest: `dist/node_modules/${module}`, flatten: false }
}

let config = {
  main: {
    build: {
      outDir: 'dist/main',
      emptyOutDir: true,
      lib: {
        formats: ['cjs'],
        entry: { main: 'src/main/main.ts' },
      },
      rollupOptions: {
        external,
        input: 'src/main/main.ts',
      },
    },
    resolve: {
      alias: {
        '@': path.resolve(__dirname, './src'),
        './lib-cov/fluent-ffmpeg': './lib/fluent-ffmpeg',
      },
    },
    plugins: [
      cp({
        targets: [
          ...external.map(genCpModule),
          { src: './manifest.json', dest: 'dist' },
          { src: './icon.jpg', dest: 'dist' },
          { src: './src/ntqqapi/native/crychic/crychic-win32-x64.node', dest: 'dist/main/' },
          // { src: './src/ntqqapi/native/moehook/MoeHoo-win32-x64.node', dest: 'dist/main/' },
          // { src: './src/ntqqapi/native/moehook/MoeHoo-linux-x64.node', dest: 'dist/main/' },
        ],
      }),
    ],
  },
  preload: {
    // vite config options
    build: {
      outDir: 'dist/preload',
      emptyOutDir: true,
      lib: {
        formats: ['cjs'],
        entry: { preload: 'src/preload.ts' },
      },
      rollupOptions: {
        // external: externalAll,
        input: 'src/preload.ts',
      },
    },
    resolve: {},
  },
  renderer: {
    // vite config options
    build: {
      outDir: 'dist/renderer',
      emptyOutDir: true,
      lib: {
        formats: ['es'],
        entry: { renderer: 'src/renderer/index.ts' },
      },
      rollupOptions: {
        // external: externalAll,
        input: 'src/renderer/index.ts',
      },
    },
    resolve: {},
  },
}

export default config