import { NextRequest, NextResponse } from 'next/server'
import { prisma } from '@/lib/db'
import { getSession } from '@/lib/auth'
import { getProjectWithTenantCheck } from '@/lib/tenant'

// POST: Add check item (or initialize from templates)
export async function POST(req: NextRequest, { params }: { params: Promise<{ id: string }> }) {
  try {
    const { id } = await params
    const user = await getSession()
    if (!user) return NextResponse.json({ error: 'Nicht autorisiert' }, { status: 401 })
    if (user.role === 'VIEWER') return NextResponse.json({ error: 'Keine Berechtigung' }, { status: 403 })

    const project = await getProjectWithTenantCheck(id, user)
    if (!project) return NextResponse.json({ error: 'Projekt nicht gefunden' }, { status: 404 })

    const body = await req.json()

    // If 'initFromTemplates' is true, create check items from templates (only if none exist)
    if (body.initFromTemplates) {
      const existing = await (prisma as any).journalCheckItem.findMany({
        where: { projectId: id },
      })
      if (existing.length > 0) {
        return NextResponse.json(existing)
      }
      // Prefer tenant-specific templates; fall back to global (tenantId=null) if none exist
      let templates = await (prisma as any).journalCheckTemplate.findMany({
        where: { isActive: true, tenantId: user.tenantId || null },
        orderBy: { sortOrder: 'asc' },
      })
      if (templates.length === 0 && user.tenantId) {
        templates = await (prisma as any).journalCheckTemplate.findMany({
          where: { isActive: true, tenantId: null },
          orderBy: { sortOrder: 'asc' },
        })
      }
      const items = await Promise.all(
        templates.map((tpl: any, i: number) =>
          (prisma as any).journalCheckItem.create({
            data: {
              projectId: id,
              label: tpl.label,
              sortOrder: i,
            },
          })
        )
      )
      return NextResponse.json(items)
    }

    // Single item creation
    const item = await (prisma as any).journalCheckItem.create({
      data: {
        projectId: id,
        label: body.label || '',
        sortOrder: body.sortOrder || 0,
      },
    })
    return NextResponse.json(item)
  } catch (error) {
    console.error('Error creating check item:', error)
    return NextResponse.json({ error: 'Failed to create check item' }, { status: 500 })
  }
}
