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

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

    const { id } = await params;
    const ficha = await prisma.fichaPartido.findUnique({
      where: { id },
      include: {
        evento: true,
        jugadores: {
          include: {
            alumno: {
              include: {
                usuario: {
                  select: { nombres: true, apellidos: true, foto: true },
                },
              },
            },
          },
          orderBy: [{ esTitular: 'desc' }, { posicion: 'asc' }],
        },
        goles: {
          include: {
            alumno: {
              include: {
                usuario: {
                  select: { nombres: true, apellidos: true },
                },
              },
            },
          },
          orderBy: { minuto: 'asc' },
        },
        tarjetas: {
          include: {
            alumno: {
              include: {
                usuario: {
                  select: { nombres: true, apellidos: true },
                },
              },
            },
          },
          orderBy: { minuto: 'asc' },
        },
      },
    });

    if (!ficha) {
      return NextResponse.json({ error: 'Ficha de partido no encontrada' }, { status: 404 });
    }

    return NextResponse.json({ ficha });
  } catch (error) {
    console.error('Error al obtener ficha de partido:', error);
    return NextResponse.json({ error: 'Error interno del servidor' }, { status: 500 });
  }
}

// PUT - Actualizar ficha de partido (resultado, observaciones, etc.)
export async function PUT(
  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 } = await params;
    const body = await request.json();

    // Determinar resultado basado en goles
    let resultado = body.resultado;
    if (body.golesAFavor !== undefined && body.golesEnContra !== undefined) {
      if (body.golesAFavor > body.golesEnContra) resultado = 'VICTORIA';
      else if (body.golesAFavor < body.golesEnContra) resultado = 'DERROTA';
      else resultado = 'EMPATE';
    }

    const ficha = await prisma.fichaPartido.update({
      where: { id },
      data: {
        golesAFavor: body.golesAFavor,
        golesEnContra: body.golesEnContra,
        resultado,
        observaciones: body.observaciones,
        formacion: body.formacion,
      },
      include: {
        jugadores: {
          include: {
            alumno: {
              include: {
                usuario: {
                  select: { nombres: true, apellidos: true },
                },
              },
            },
          },
        },
        goles: true,
        tarjetas: true,
      },
    });

    return NextResponse.json({ ficha });
  } catch (error) {
    console.error('Error al actualizar ficha de partido:', error);
    return NextResponse.json({ error: 'Error interno del servidor' }, { status: 500 });
  }
}

// DELETE - Eliminar ficha de partido
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 (session.user.rol !== 'COORDINADOR') {
      return NextResponse.json({ error: 'Sin permisos suficientes' }, { status: 403 });
    }

    const { id } = await params;
    await prisma.fichaPartido.delete({
      where: { id },
    });

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