
import { NextRequest, NextResponse } from 'next/server';
import { PrismaClient } from '@prisma/client';
import { z } from 'zod';

export const dynamic = "force-dynamic";

const prisma = new PrismaClient();

const inscripcionSchema = z.object({
  nombreEstudiante: z.string().min(2, "El nombre debe tener al menos 2 caracteres"),
  apellidoEstudiante: z.string().min(2, "El apellido debe tener al menos 2 caracteres"),
  fechaNacimiento: z.string().min(10, "Fecha de nacimiento requerida"),
  genero: z.string().optional(),
  nombreContacto: z.string().min(2, "El nombre del contacto es requerido"),
  apellidoContacto: z.string().min(2, "El apellido del contacto es requerido"),
  telefonoContacto: z.string().min(8, "Teléfono de contacto requerido"),
  emailContacto: z.string().email("Email de contacto inválido"),
  parentesco: z.string().min(1, "Parentesco requerido"),
  direccion: z.string().optional(),
  provinciaId: z.string().min(1, "Provincia requerida"),
  comunaId: z.string().min(1, "Comuna requerida"),
  deporteId: z.string().optional(),
  experienciaPrevia: z.string().optional(),
  condicionesMedicas: z.string().optional(),
  objetivos: z.string().optional(),
  diasPreferidos: z.array(z.string()).optional(),
  horarioPreferido: z.string().optional(),
});

export async function GET() {
  try {
    const inscripciones = await prisma.inscripcion.findMany({
      include: {
        provincia: { select: { nombre: true } },
        comuna: { select: { nombre: true } },
        deporte: { select: { nombre: true } },
        escuela: { select: { nombre: true } },
      },
      orderBy: { createdAt: 'desc' },
    });

    return NextResponse.json(inscripciones);
  } catch (error) {
    console.error('Error fetching inscripciones:', error);
    return NextResponse.json(
      { error: 'Error al obtener inscripciones' },
      { status: 500 }
    );
  } finally {
    await prisma.$disconnect();
  }
}

export async function POST(request: NextRequest) {
  try {
    const body = await request.json();
    const validatedData = inscripcionSchema.parse(body);

    const inscripcion = await prisma.inscripcion.create({
      data: {
        ...validatedData,
        fechaNacimiento: new Date(validatedData.fechaNacimiento),
        diasPreferidos: validatedData.diasPreferidos || [],
        estado: 'pendiente',
      },
    });

    return NextResponse.json({
      message: 'Inscripción creada exitosamente',
      inscripcion: {
        id: inscripcion.id,
        nombreEstudiante: inscripcion.nombreEstudiante,
        apellidoEstudiante: inscripcion.apellidoEstudiante,
      },
    });

  } catch (error) {
    console.error('Error en inscripción:', 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();
  }
}
