import type { APIRoute } from "astro";
import { appendToSheet } from "../lib/googleSheets";
import { sendEmailCf } from "../lib/email";
import { prisma } from "../lib/prisma";
import { emailExistsInDb } from "../lib/formularioDb";
export const prerender = false;

export const POST: APIRoute = async ({ request }) => {
  try {
    // 🔹 Leer datos del formulario
    const formData = await request.formData();

    const nombres = formData.get("nombres")?.toString().trim();
    const apellidos = formData.get("apellidos")?.toString().trim();
    const pais = formData.get("pais")?.toString().trim();
    const lugar = formData.get("lugar")?.toString().trim();
    const direccion = formData.get("direccion")?.toString().trim();
    const telefono = formData.get("telefono")?.toString().trim();
    const email = formData.get("email")?.toString().trim();


    // 🔹 Validación básica
    if (!nombres || !apellidos || !telefono || !email) {
      return Response.redirect("/?error=datos", 303);
    }

    const exists = await emailExistsInDb(email);
    if (exists) {
      return Response.json({
        success: false,
        message: 'El email ya existe en la base de datos',
      })
    }

    const valuesForSheets = [
      nombres,
      apellidos,
      pais,
      lugar,
      direccion,
      telefono,
      email,
      new Date().toLocaleString()
    ];

    // 🔹 Enviar correo (Cloudflare), guardar en Google Sheets y en PostgreSQL
    await Promise.all([
      sendEmailCf({ nombres, apellidos }, email, "CENTRO_DEL_REINO_PAZ_Y_JUSTICIA_POSTULACION"),
      appendToSheet(valuesForSheets),
      prisma.formulario.create({
        data: {
          nombre: nombres!,
          apellido: apellidos!,
          pais: pais || null,
          ciudad: lugar || null,
          direccion: direccion || null,
          telefono: telefono || null,
          correo: email!,
          status: "legacy",
        },
      }),
    ]);

    // 🔹 Redirección elegante después de enviar
    return new Response(null, {
      status: 302,
      headers: {
        Location: "/?success=true",
      },
    });

  } catch (error) {
    return new Response(null, {
      status: 302,
      headers: {
        Location: "/",
      },
    });
  }
};
