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

// Erlaubt nur dem Session-Ersteller, einen anderen Teilnehmer zu entfernen (is_active = 0).
// Der Ersteller kann sich nicht selbst kicken (dafuer gibt es /leave).
export async function POST(req: NextRequest, { params }: { params: Promise<{ code: string }> }) {
  const { code } = await params;
  const parsed = await parseBody(req, kickSchema);
  if (!parsed.success) return parsed.response;

  const { requesterId, targetParticipantId } = 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 = ? AND session_id = ?'
  ).get(requesterId, session.id) as any;

  if (!requester || requester.is_creator !== 1) {
    return NextResponse.json({ error: 'Nur der Ersteller darf Teilnehmer entfernen' }, { status: 403 });
  }

  if (Number(targetParticipantId) === Number(requesterId)) {
    return NextResponse.json({ error: 'Der Ersteller kann sich nicht selbst entfernen' }, { status: 400 });
  }

  const target = db.prepare(
    'SELECT * FROM participants WHERE id = ? AND session_id = ?'
  ).get(targetParticipantId, session.id) as any;
  if (!target) return NextResponse.json({ error: 'Teilnehmer nicht gefunden' }, { status: 404 });

  db.prepare('UPDATE participants SET is_active = 0 WHERE id = ?').run(targetParticipantId);

  return NextResponse.json({ kicked: true });
}
