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

// POST - Registrar gol
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, tipoGol, asistenciaId } = body;

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

    // Crear gol y actualizar contador en transacción
    const gol = await prisma.$transaction(async (tx) => {
      const nuevoGol = await tx.golPartido.create({
        data: {
          fichaPartidoId,
          alumnoId,
          minuto,
          tipoGol,
          asistenciaId,
        },
        include: {
          alumno: {
            include: {
              usuario: {
                select: { nombres: true, apellidos: true },
              },
            },
          },
        },
      });

      // Actualizar goles a favor
      await tx.fichaPartido.update({
        where: { id: fichaPartidoId },
        data: {
          golesAFavor: { increment: 1 },
        },
      });

      return nuevoGol;
    });

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

// DELETE - Eliminar gol
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 golId = searchParams.get('golId');

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

    await prisma.$transaction(async (tx) => {
      await tx.golPartido.delete({
        where: { id: golId, fichaPartidoId },
      });

      await tx.fichaPartido.update({
        where: { id: fichaPartidoId },
        data: {
          golesAFavor: { decrement: 1 },
        },
      });
    });

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