import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'

export default defineConfig({
  plugins: [vue()],
  server: {
    host: true,
    port: 5173
  },
  build: {
    rollupOptions: {
      output: {
        manualChunks(id) {
          if (!id.includes('node_modules')) return

          const modulePath = id.split('node_modules/')[1]
          const segments = modulePath.split('/')
          const packageName = segments[0].startsWith('@')
            ? `${segments[0]}/${segments[1]}`
            : segments[0]

          if (packageName.startsWith('@milkdown')) return 'milkdown'
          if (packageName.startsWith('prosemirror')) return 'prosemirror'

          if (packageName.startsWith('@codemirror')) {
            const langMatch = modulePath.match(/@codemirror\/lang-([^/]+)/)
            if (langMatch) return `cm-lang-${langMatch[1]}`
            return `cm-${segments[1]}`
          }

          if (packageName === 'refractor') {
            const langMatch = modulePath.match(/refractor\/lang\/([^./]+)/)
            if (langMatch) return `refractor-lang-${langMatch[1]}`
            return 'refractor-core'
          }

          if (packageName.startsWith('katex')) return 'katex'
          if (packageName.startsWith('markdown-it')) return 'markdown'
          if (packageName === 'vue' || packageName.startsWith('@vue')) return 'vue'

          return `vendor-${packageName.replace('@', '').replace('/', '-')}`
        }
      }
    }
  },
  optimizeDeps: {
    include: [
      '@milkdown/crepe',
      '@milkdown/vue',
      '@milkdown/kit'
    ]
  }
})
