import { NextRequest, NextResponse } from 'next/server';
import { getDb } from '@/lib/db';
import { parseBody, participantActionSchema } from '@/lib/validation';

const MAX_EXPAND_LEVEL = 2;

// "Weitere Karten anfordern" (Host-Aktion): erhoeht die session-weit
// synchronisierte Expand-Stufe. Der Restaurants-Endpoint vergroessert damit
// den Suchradius fuer ALLE Teilnehmer; der Joker rutscht so bei allen wieder
// unter die neuen Karten. Berechtigung wie beim Joker: nur der Session-
// Ersteller (oder jemand anderes, falls dieser die Session verlassen hat).
export async function POST(req: NextRequest, { params }: { params: Promise<{ code: string }> }) {
  const { code } = await params;
  const parsed = await parseBody(req, participantActionSchema);
  if (!parsed.success) return parsed.response;

  const { participantId } = parsed.data;
  const db = getDb();

  const session = db.prepare('SELECT * FROM sessions WHERE code = ?').get(code) as any;
  if (!session) return NextResponse.json({ error: 'Session nicht gefunden' }, { status: 404 });

  const requester = db.prepare('SELECT * FROM participants WHERE id = ?').get(participantId) as any;
  if (!requester || requester.session_id !== session.id || requester.is_active !== 1) {
    return NextResponse.json({ error: 'Nicht berechtigt' }, { status: 403 });
  }

  const activeCreator = db
    .prepare('SELECT * FROM participants WHERE session_id = ? AND is_creator = 1 AND is_active = 1')
    .get(session.id) as any;

  const isAllowed = requester.is_creator === 1 || !activeCreator;
  if (!isAllowed) {
    return NextResponse.json(
      { error: 'Nur der Session-Ersteller darf weitere Karten anfordern' },
      { status: 403 }
    );
  }

  const current = Number(session.expand_level || 0);
  if (current >= MAX_EXPAND_LEVEL) {
    return NextResponse.json({ error: 'Keine weiteren Karten verfuegbar' }, { status: 400 });
  }

  const next = current + 1;
  db.prepare('UPDATE sessions SET expand_level = ? WHERE id = ?').run(next, session.id);

  return NextResponse.json({ expandLevel: next });
}
