import { readFile, writeFile } from 'node:fs/promises'
import { defineConfig } from 'tsdown'
import { tsdownBase } from '@tooling/tsdown-config'
import { deriveSubpaths } from '@tooling/tsdown-config/subpaths'

// Each component is emitted alongside the barrel so consumers can import a
// single component without pulling the full bundle:
//   import { RadioGroup } from '@platform-modules/ui-primitives/RadioGroup'
// The entry list is DERIVED from src (single source of truth shared with the
// package.json `exports` codegen) — never hand-maintained.
export default defineConfig({
  ...tsdownBase({
    entry: [
      'src/index.tsx',
      ...deriveSubpaths('src').map(s => s.srcFile),
    ],
    neverBundle: [
      'react',
      'react-dom',
      '@platform-modules/ui-editor',
      '@platform-modules/ui-tokens',
      'class-variance-authority',
      '@radix-ui/react-avatar',
      '@radix-ui/react-checkbox',
      '@radix-ui/react-dialog',
      '@radix-ui/react-dropdown-menu',
      '@radix-ui/react-radio-group',
      '@radix-ui/react-tabs',
      '@radix-ui/react-select',
      '@radix-ui/react-slot',
      '@radix-ui/react-switch',
      '@radix-ui/react-toast',
      '@radix-ui/react-tooltip',
      'react-day-picker',
      '@tanstack/react-virtual',
    ],
  }),
  onSuccess: async () => {
    const path = 'dist/editor-widget/index.js'
    const code = await readFile(path, 'utf8')
    if (!code.startsWith("'use client'")) {
      await writeFile(path, `'use client'\n${code}`)
    }
    const output = await readFile(path, 'utf8')
    if (!output.startsWith("'use client'")) {
      throw new Error(`${path} is missing the client boundary`)
    }
  },
})
