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,
  { params }: { params: { id: string } }
) {
  try {
    const session = await getServerSession(authOptions);
    
    if (!session || !session.user) {
      return NextResponse.json({ error: 'No autorizado' }, { status: 401 });
    }

    const evento = await prisma.evento.findUnique({
      where: { id: params.id },
      include: {
        creador: { select: { nombreCorto: true } },
        asistencias: {
          include: {
            usuario: { select: { nombreCorto: true, foto: true } }
          }
        },
        alineacion: true
      }
    });

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

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

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 eventoActualizado = await prisma.evento.update({
      where: { id: params.id },
      data: {
        descripcion: data.descripcion,
        fecha: data.fecha ? new Date(data.fecha) : undefined,
        hora: data.hora,
        lugar: data.lugar,
        categorias: data.categorias,
        estado: data.estado,
        rival: data.rival
      },
      include: {
        creador: { select: { nombreCorto: true } }
      }
    });

    return NextResponse.json({ 
      evento: eventoActualizado, 
      message: 'Evento actualizado exitosamente' 
    });

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

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 });
    }

    await prisma.evento.delete({
      where: { id: params.id }
    });

    return NextResponse.json({ 
      message: 'Evento eliminado exitosamente' 
    });

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