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

// GET: Obtener un alumno por ID
export async function GET(
  request: NextRequest,
  { params }: { params: { id: string } }
) {
  try {
    const session = await getServerSession(authOptions);
    
    if (!session || !session.user) {
      return NextResponse.json({ error: 'No autorizado' }, { status: 401 });
    }

    const alumno = await prisma.alumno.findUnique({
      where: { id: params.id },
      include: {
        usuario: true,
        apoderado: true,
        evaluacionesFisicas: {
          include: {
            evaluador: {
              select: {
                nombreCorto: true
              }
            }
          },
          orderBy: {
            fecha: 'desc'
          },
          take: 5
        },
        evaluacionesDeportivas: {
          include: {
            evaluador: {
              select: {
                nombreCorto: true
              }
            }
          },
          orderBy: {
            fecha: 'desc'
          },
          take: 5
        }
      }
    });

    if (!alumno) {
      return NextResponse.json({ error: 'Alumno no encontrado' }, { status: 404 });
    }

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

// PUT: Actualizar alumno
export async function PUT(
  request: NextRequest,
  { params }: { params: { id: string } }
) {
  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 { usuario: usuarioData, alumno: alumnoData } = data;

    const alumnoActualizado = await prisma.$transaction(async (tx: any) => {
      if (usuarioData) {
        await tx.usuario.update({
          where: { id: usuarioData.id },
          data: {
            nombres: usuarioData.nombres,
            apellidos: usuarioData.apellidos,
            telefono: usuarioData.telefono,
            email: usuarioData.email,
            activo: usuarioData.activo
          }
        });
      }

      const alumno = await tx.alumno.update({
        where: { id: params.id },
        data: {
          apodo: alumnoData.apodo,
          categoria: alumnoData.categoria,
          peso: alumnoData.peso,
          altura: alumnoData.altura,
          piernaHabil: alumnoData.piernaHabil,
          posicionPrincipal: alumnoData.posicionPrincipal,
          tallaCamiseta: alumnoData.tallaCamiseta,
          tallaPantalon: alumnoData.tallaPantalon,
          modalidadPago: alumnoData.modalidadPago
        },
        include: {
          usuario: true,
          apoderado: true
        }
      });

      return alumno;
    });

    return NextResponse.json({ 
      alumno: alumnoActualizado, 
      message: 'Alumno actualizado exitosamente' 
    });

  } catch (error: any) {
    console.error('Error al actualizar alumno:', error);
    return NextResponse.json({ error: error.message }, { status: 500 });
  }
}

// DELETE: Eliminar alumno (soft delete)
export async function DELETE(
  request: NextRequest,
  { params }: { params: { id: string } }
) {
  try {
    const session = await getServerSession(authOptions);
    
    if (!session || !session.user) {
      return NextResponse.json({ error: 'No autorizado' }, { status: 401 });
    }

    if (session.user.rol !== 'COORDINADOR') {
      return NextResponse.json({ error: 'Permisos insuficientes' }, { status: 403 });
    }

    const alumno = await prisma.alumno.findUnique({
      where: { id: params.id },
      include: { usuario: true }
    });

    if (!alumno) {
      return NextResponse.json({ error: 'Alumno no encontrado' }, { status: 404 });
    }

    await prisma.usuario.update({
      where: { id: alumno.usuarioId },
      data: { activo: false }
    });

    return NextResponse.json({ 
      message: 'Alumno desactivado exitosamente' 
    });

  } catch (error: any) {
    console.error('Error al eliminar alumno:', error);
    return NextResponse.json({ error: error.message }, { status: 500 });
  }
}
