import { fileURLToPath } from 'node:url'
import { resolve } from 'node:path'
import { readdirSync } from 'node:fs'

import { defineConfig } from 'vite'
import UnoCSS from 'unocss/vite'

import { DevRenderingPlugin } from './lib/dev'
import { RenderPlugin } from './lib/render'

const rootDir = fileURLToPath(new URL('.', import.meta.url))
const r = (...path: string[]) => resolve(rootDir, ...path)

export default defineConfig({
  build: {
    outDir: process.env.OUTPUT_DIR || 'dist',
    rollupOptions: {
      input: {
        ...Object.fromEntries(
          readdirSync(r('templates')).filter(dir => dir !== 'messages.json').map(dir => [
            dir,
            r('templates', dir, 'index.html'),
          ]),
        ),
        index: r('index.html'),
      },
    },
  },
  plugins: [
    UnoCSS(),
    DevRenderingPlugin(),
    RenderPlugin(),
  ],
  server: {
    fs: {
      allow: ['./templates', rootDir],
    },
  },
})