import type { APIRoute } from "astro";
import { prisma } from "../../lib/prisma";
import { t, type I18nKey } from "../../../../i18n";

export const prerender = false;

export const GET: APIRoute = async ({ params }) => {
  try {
    const numero = Number(params.numero);
    if (!Number.isInteger(numero) || numero <= 0) {
      return Response.json(
        { success: false, message: "Número de voluntario inválido" },
        { status: 404 }
      );
    }

    const [voluntario, secciones] = await Promise.all([
      prisma.formulario.findUnique({
        where: { numero_voluntario: numero },
        include: { respuestas: { orderBy: { created_at: "asc" } } },
      }),
      prisma.seccion.findMany({
        orderBy: { orden: "asc" },
        include: { campos: { orderBy: { orden: "asc" } } },
      }),
    ]);

    if (!voluntario) {
      return Response.json(
        { success: false, message: "Voluntario no encontrado" },
        { status: 404 }
      );
    }

    const sections = secciones.map((s) => ({
      key: s.title_key.replace(/^form\./, ""),
      title: t("es", s.title_key as I18nKey),
      fields: s.campos.map((c) => ({
        key: c.key,
        label: t("es", c.label_key as I18nKey),
        tipo: c.tipo,
        options: Array.isArray(c.options)
          ? (c.options as { value?: string; label?: string }[])
              .filter((o) => o && typeof o === "object")
              .map((o) => ({
                value: o.value ?? "",
                label: o.label ? t("es", o.label as I18nKey) : o.value ?? "",
              }))
          : [],
      })),
    }));

    return Response.json({
      success: true,
      data: {
        id: voluntario.id,
        numero_voluntario: voluntario.numero_voluntario,
        nombre: voluntario.nombre,
        segundo_nombre: voluntario.segundo_nombre,
        apellido: voluntario.apellido,
        documento_nro: voluntario.documento_nro,
        documento_tipo: voluntario.documento_tipo,
        correo: voluntario.correo,
        fecha_nacimiento: voluntario.fecha_nacimiento,
        nacionalidad: voluntario.nacionalidad,
        sexo: voluntario.sexo,
        direccion: voluntario.direccion,
        ciudad: voluntario.ciudad,
        estado: voluntario.estado,
        pais: voluntario.pais,
        codigo_postal: voluntario.codigo_postal,
        telefono: voluntario.telefono,
        whatsapp: voluntario.whatsapp,
        profesion: voluntario.profesion,
        lugar_trabajo: voluntario.lugar_trabajo,
        nivel_academico: voluntario.nivel_academico,
        status: voluntario.status,
        form_version: voluntario.form_version,
        email_sent_at: voluntario.email_sent_at,
        submitted_at: voluntario.submitted_at,
        updated_at: voluntario.updated_at,
        respuestas: voluntario.respuestas.map((r) => ({
          seccion: r.seccion,
          key: r.key,
          value: r.value,
        })),
      },
      form: { sections },
    }, {
      headers: { "Cache-Control": "private, max-age=60, stale-while-revalidate=120" },
    });
  } catch (error) {
    console.error("Error en /api/admin/voluntarios/[numero]:", error);
    return Response.json(
      { success: false, message: "Error al obtener el voluntario" },
      { status: 500 }
    );
  }
};
