import { createServerFn } from "@tanstack/react-start";
import { z } from "zod";

const schema = z.object({
  name: z.string().trim().min(1).max(100),
  email: z.string().trim().email().max(255),
  message: z.string().trim().min(1).max(2000),
  consent: z.literal(true),
  page: z.string().max(200).optional(),
  token: z.string().max(4000).optional(),
  website: z.string().max(0).optional(), // honeypot
});

export const submitContact = createServerFn({ method: "POST" })
  .inputValidator((d) => schema.parse(d))
  .handler(async ({ data }) => {
    let score: number | null = null;
    const secret = process.env['RECAPTCHA_SECRET_KEY'];
    if (secret) {
      if (!data.token) return { ok: false as const, error: "Falha na verificação do reCAPTCHA." };
      const r = await fetch("https://www.google.com/recaptcha/api/siteverify", {
        method: "POST",
        headers: { "Content-Type": "application/x-www-form-urlencoded" },
        body: new URLSearchParams({ secret, response: data.token }),
      });
      const v = (await r.json()) as { success: boolean; score?: number; action?: string };
      score = v.score ?? null;
      if (!v.success || (v.score ?? 0) < 0.5) {
        console.error("recaptcha rejected", v);
        return { ok: false as const, error: "Falha na verificação do reCAPTCHA. Tente novamente." };
      }
    } else {
      console.warn("RECAPTCHA_SECRET_KEY not set; skipping verification");
    }
    const { supabaseAdmin } = await import("@/integrations/supabase/client.server");
    const { error } = await supabaseAdmin.from("contact_submissions").insert({
      name: data.name, email: data.email, message: data.message, page: data.page ?? null, recaptcha_score: score,
    });
    if (error) {
      console.error(error);
      return { ok: false as const, error: "Não foi possível enviar. Tente novamente." };
    }
    return { ok: true as const };
  });
