
import { NextRequest, NextResponse } from 'next/server';
import { PrismaClient } from '@prisma/client';
import { getServerSession } from "next-auth/next";
import { authOptions } from "@/lib/auth";
import { z } from 'zod';

export const dynamic = "force-dynamic";

const prisma = new PrismaClient();

const updateSchema = z.object({
  estado: z.enum(['pendiente', 'aprobada', 'rechazada', 'en_curso', 'finalizada']),
  notasAdmin: z.string().optional(),
});

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

    const body = await request.json();
    const validatedData = updateSchema.parse(body);

    const inscripcion = await prisma.inscripcion.update({
      where: { id: params.id },
      data: {
        ...validatedData,
        fechaProcesamiento: new Date(),
        updatedAt: new Date(),
      },
    });

    return NextResponse.json({
      message: 'Inscripción actualizada exitosamente',
      inscripcion: {
        id: inscripcion.id,
        estado: inscripcion.estado,
      },
    });

  } catch (error) {
    console.error('Error updating inscripcion:', error);
    
    if (error instanceof z.ZodError) {
      return NextResponse.json(
        { error: 'Datos inválidos', details: error.errors },
        { status: 400 }
      );
    }

    return NextResponse.json(
      { error: 'Error interno del servidor' },
      { status: 500 }
    );
  } finally {
    await prisma.$disconnect();
  }
}

export async function GET(
  request: NextRequest,
  { params }: { params: { id: string } }
) {
  try {
    const inscripcion = await prisma.inscripcion.findUnique({
      where: { id: params.id },
      include: {
        provincia: { select: { nombre: true } },
        comuna: { select: { nombre: true } },
        deporte: { select: { nombre: true, categorias: true } },
        escuela: { select: { nombre: true } },
        instructor: { select: { nombre: true, apellido: true } },
      },
    });

    if (!inscripcion) {
      return NextResponse.json(
        { error: 'Inscripción no encontrada' },
        { status: 404 }
      );
    }

    return NextResponse.json(inscripcion);

  } catch (error) {
    console.error('Error fetching inscripcion:', error);
    return NextResponse.json(
      { error: 'Error interno del servidor' },
      { status: 500 }
    );
  } finally {
    await prisma.$disconnect();
  }
}
