import { NextRequest, NextResponse } from 'next/server';
import { getServerSession } from 'next-auth';
import { authOptions } from '@/lib/auth';
import { prisma } from '@/lib/db';

// POST - Registrar tarjeta
export async function POST(
  request: NextRequest,
  { params }: { params: Promise<{ id: string }> }
) {
  try {
    const session = await getServerSession(authOptions);
    if (!session?.user) {
      return NextResponse.json({ error: 'No autorizado' }, { status: 401 });
    }

    if (!['COORDINADOR', 'PROFESOR'].includes(session.user.rol || '')) {
      return NextResponse.json({ error: 'Sin permisos suficientes' }, { status: 403 });
    }

    const { id: fichaPartidoId } = await params;
    const body = await request.json();
    const { alumnoId, minuto, tipo, motivo } = body;

    if (!alumnoId || minuto === undefined || !tipo) {
      return NextResponse.json({ error: 'Faltan campos requeridos' }, { status: 400 });
    }

    if (!['AMARILLA', 'ROJA'].includes(tipo)) {
      return NextResponse.json({ error: 'Tipo de tarjeta inválido' }, { status: 400 });
    }

    const tarjeta = await prisma.tarjetaPartido.create({
      data: {
        fichaPartidoId,
        alumnoId,
        minuto,
        tipo,
        motivo,
      },
      include: {
        alumno: {
          include: {
            usuario: {
              select: { nombres: true, apellidos: true },
            },
          },
        },
      },
    });

    return NextResponse.json({ tarjeta }, { status: 201 });
  } catch (error) {
    console.error('Error al registrar tarjeta:', error);
    return NextResponse.json({ error: 'Error interno del servidor' }, { status: 500 });
  }
}

// DELETE - Eliminar tarjeta
export async function DELETE(
  request: NextRequest,
  { params }: { params: Promise<{ id: string }> }
) {
  try {
    const session = await getServerSession(authOptions);
    if (!session?.user) {
      return NextResponse.json({ error: 'No autorizado' }, { status: 401 });
    }

    if (!['COORDINADOR', 'PROFESOR'].includes(session.user.rol || '')) {
      return NextResponse.json({ error: 'Sin permisos suficientes' }, { status: 403 });
    }

    const { id: fichaPartidoId } = await params;
    const { searchParams } = new URL(request.url);
    const tarjetaId = searchParams.get('tarjetaId');

    if (!tarjetaId) {
      return NextResponse.json({ error: 'ID de tarjeta requerido' }, { status: 400 });
    }

    await prisma.tarjetaPartido.delete({
      where: { id: tarjetaId, fichaPartidoId },
    });

    return NextResponse.json({ message: 'Tarjeta eliminada' });
  } catch (error) {
    console.error('Error al eliminar tarjeta:', error);
    return NextResponse.json({ error: 'Error interno del servidor' }, { status: 500 });
  }
}
