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 eventoId = searchParams.get('eventoId');
    const usuarioId = searchParams.get('usuarioId');

    const whereClause: any = {};
    if (eventoId) whereClause.eventoId = eventoId;
    if (usuarioId) whereClause.usuarioId = usuarioId;

    const asistencias = await prisma.asistencia.findMany({
      where: whereClause,
      include: {
        evento: {
          select: {
            descripcion: true,
            fecha: true,
            tipo: true
          }
        },
        usuario: {
          select: {
            nombreCorto: true,
            foto: true
          }
        }
      },
      orderBy: {
        fecha: 'desc'
      }
    });

    return NextResponse.json({ asistencias, total: asistencias.length });
  } catch (error: any) {
    console.error('Error al obtener asistencias:', 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 asistencia = await prisma.asistencia.create({
      data: {
        eventoId: data.eventoId,
        usuarioId: data.usuarioId,
        presente: data.presente,
        pagoMonto: data.pagoMonto,
        esInvitado: data.esInvitado || false,
        nombreInvitado: data.nombreInvitado
      },
      include: {
        usuario: { select: { nombreCorto: true } },
        evento: { select: { descripcion: true } }
      }
    });

    return NextResponse.json({ 
      asistencia, 
      message: 'Asistencia registrada exitosamente' 
    }, { status: 201 });

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