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

export async function GET(request: NextRequest) {
  try {
    const session = await getServerSession(authOptions);
    
    if (!session || !session.user) {
      return NextResponse.json({ error: 'No autorizado' }, { status: 401 });
    }

    const { searchParams } = new URL(request.url);
    const alumnoId = searchParams.get('alumnoId');

    const evaluaciones = await prisma.evaluacionDeportiva.findMany({
      where: alumnoId ? { alumnoId } : {},
      include: {
        alumno: {
          include: {
            usuario: {
              select: {
                nombreCorto: true
              }
            }
          }
        },
        evaluador: {
          select: {
            nombreCorto: true
          }
        }
      },
      orderBy: {
        fecha: 'desc'
      }
    });

    return NextResponse.json({ evaluaciones, total: evaluaciones.length });
  } catch (error: any) {
    console.error('Error al obtener evaluaciones:', error);
    return NextResponse.json({ error: error.message }, { status: 500 });
  }
}

export async function POST(request: NextRequest) {
  try {
    const session = await getServerSession(authOptions);
    
    if (!session || !session.user) {
      return NextResponse.json({ error: 'No autorizado' }, { status: 401 });
    }

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

    const data = await request.json();

    const puntajeTotal = (
      parseFloat(data.tecnica || 0) +
      parseFloat(data.fuerza || 0) +
      parseFloat(data.ataque || 0) +
      parseFloat(data.defensa || 0) +
      parseFloat(data.resistencia || 0) +
      parseFloat(data.velocidad || 0)
    ) / 6;

    const evaluacion = await prisma.evaluacionDeportiva.create({
      data: {
        alumnoId: data.alumnoId,
        evaluadorId: session.user.usuarioId!,
        tecnica: parseFloat(data.tecnica || 1),
        fuerza: parseFloat(data.fuerza || 1),
        ataque: parseFloat(data.ataque || 1),
        defensa: parseFloat(data.defensa || 1),
        resistencia: parseFloat(data.resistencia || 1),
        velocidad: parseFloat(data.velocidad || 1),
        puntajeTotal,
        posicionesPreferentes: data.posicionesPreferentes || [],
        observaciones: data.observaciones
      },
      include: {
        alumno: {
          include: {
            usuario: { select: { nombreCorto: true } }
          }
        },
        evaluador: { select: { nombreCorto: true } }
      }
    });

    return NextResponse.json({ 
      evaluacion, 
      message: 'Evaluación deportiva registrada exitosamente' 
    }, { status: 201 });

  } catch (error: any) {
    console.error('Error al crear evaluación:', error);
    return NextResponse.json({ error: error.message }, { status: 500 });
  }
}
