// tdd-guard:skip — Next.js route handler; pack-dispatch logic is covered by lib/demo/seeder tests.
import { NextRequest, NextResponse } from 'next/server'
import { getUserSession } from '@/lib/auth/permissions'
import { isAtLeastRole } from '@/lib/auth/permissions-shared'
import { createAdminClient } from '@/lib/supabase/admin'
import { seedPack } from '@/lib/demo/seeder'
type DemoPackCode = 'projektanlage' | 'kalender' | 'lsc_workshop' | 'fabrikanalyse' | 'oee' | 'wertstrom' | 'berater' | 'datenablage' | 'auftragseingang' | 'top_management_demo'
import type { DemoModule } from '@/lib/demo/demo-service'

// Map DemoModule (hyphenated, used in the tenant app) → DemoPackCode (underscored, used in control plane)
const MODULE_TO_PACK: Record<DemoModule, DemoPackCode> = {
  'projektanlage': 'projektanlage',
  'kalender':      'kalender',
  'lsc-workshop':  'lsc_workshop',
  'fabrikanalyse': 'fabrikanalyse',
  'oee':           'oee',
  'wertstrom':     'wertstrom',
  'datenablage':   'datenablage',
  'auftragseingang': 'auftragseingang',
  'top-management-demo': 'top_management_demo',
}

export async function POST(req: NextRequest) {
  const session = await getUserSession()
  if (!session || !isAtLeastRole(session, 'admin')) {
    return NextResponse.json({ error: 'Forbidden' }, { status: 403 })
  }

  const body = await req.json().catch(() => ({}))
  const modules: DemoModule[] = body.modules ?? ['projektanlage', 'kalender']

  // The admin client uses env vars for the current (host app) tenant database.
  const admin = createAdminClient()

  const allErrors: string[] = []

  for (const mod of modules) {
    const packCode = MODULE_TO_PACK[mod]
    if (!packCode) {
      allErrors.push(`Unknown module: ${mod}`)
      continue
    }

    const result = await seedPack(admin, packCode, session.authUserId)
    if (!result.success) {
      allErrors.push(...result.errors)
    }
  }

  if (allErrors.length > 0) {
    return NextResponse.json({ ok: false, errors: allErrors }, { status: 500 })
  }

  return NextResponse.json({ ok: true, modules })
}
