import { NextRequest, NextResponse } from 'next/server'
import { prisma } from '@/lib/db'
import { getSession } from '@/lib/auth'
import { normalizeModules, DEFAULT_MODULES } from '@/lib/modules'

/** Cockpit-Modul-Konfiguration des eigenen Mandanten lesen */
export async function GET() {
  try {
    const user = await getSession()
    if (!user) return NextResponse.json({ error: 'Nicht autorisiert' }, { status: 401 })

    if (!user.tenantId) {
      // SERVER_ADMIN ohne Mandant: Standard-Cockpit
      return NextResponse.json({ modules: DEFAULT_MODULES, canManage: false })
    }

    const tenant = await (prisma as any).tenant.findUnique({
      where: { id: user.tenantId },
      select: { modulesConfig: true },
    })

    const canManage = user.role === 'SERVER_ADMIN' || user.role === 'TENANT_ADMIN'
    return NextResponse.json({
      modules: normalizeModules(tenant?.modulesConfig),
      canManage,
    })
  } catch (error) {
    console.error('Error fetching module config:', error)
    return NextResponse.json({ error: 'Serverfehler' }, { status: 500 })
  }
}

/** Cockpit-Modul-Konfiguration speichern (nur Admins) */
export async function PUT(request: NextRequest) {
  try {
    const user = await getSession()
    if (!user) return NextResponse.json({ error: 'Nicht autorisiert' }, { status: 401 })
    if (!user.tenantId) return NextResponse.json({ error: 'Kein Mandant zugeordnet' }, { status: 400 })
    if (user.role !== 'SERVER_ADMIN' && user.role !== 'TENANT_ADMIN') {
      return NextResponse.json({ error: 'Keine Berechtigung' }, { status: 403 })
    }

    const body = await request.json()
    // normalizeModules verwirft Unbekanntes und stellt eingebaute Module sicher
    const modules = normalizeModules(body?.modules)

    await (prisma as any).tenant.update({
      where: { id: user.tenantId },
      data: { modulesConfig: modules },
    })

    return NextResponse.json({ modules })
  } catch (error) {
    console.error('Error saving module config:', error)
    return NextResponse.json({ error: 'Serverfehler' }, { status: 500 })
  }
}
