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.evaluacionFisica.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 evaluacion = await prisma.evaluacionFisica.create({
      data: {
        alumnoId: data.alumnoId,
        evaluadorId: session.user.usuarioId!,
        postura1: data.postura1 || false,
        postura2: data.postura2 || false,
        postura3: data.postura3 || false,
        postura4: data.postura4 || false,
        postura5: data.postura5 || false,
        postura6: data.postura6 || false,
        postura7: data.postura7 || false,
        postura8: data.postura8 || false,
        postura9: data.postura9 || false,
        postura10: data.postura10 || false,
        puntajeAgilidad: data.puntajeAgilidad || 0,
        tiempoVelocidad: data.tiempoVelocidad,
        puntajeVelocidad: data.puntajeVelocidad,
        alturaVertical: data.alturaVertical,
        puntajeVertical: data.puntajeVertical,
        distanciaHorizontal: data.distanciaHorizontal,
        puntajeHorizontal: data.puntajeHorizontal,
        puntajeTotal: data.puntajeTotal,
        observaciones: data.observaciones
      },
      include: {
        alumno: {
          include: {
            usuario: { select: { nombreCorto: true } }
          }
        },
        evaluador: { select: { nombreCorto: true } }
      }
    });

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

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