"use server";

import {
  newsletterSchema,
  type NewsletterState,
} from "@/lib/validations/newsletter";
import { captureSubscriber } from "@/lib/listmonk";
import { opServer } from "@/lib/openpanel";

/**
 * Inscription à la newsletter.
 *
 * Volontairement minimale : pas d'email transactionnel, pas de notification
 * interne. Listmonk envoie lui-même son message de confirmation (double
 * opt-in), donc dupliquer l'envoi n'apporterait rien et créerait deux mails
 * pour une seule action.
 *
 * Le nom de l'abonné est l'email : ce formulaire ne demande que ça, et c'est
 * précisément ce qui le rend peu intrusif.
 */
export async function subscribeToNewsletter(
  prevState: NewsletterState,
  formData: FormData,
): Promise<NewsletterState> {
  const validated = newsletterSchema.safeParse({
    email: formData.get("email"),
    website: formData.get("website"),
  });

  if (!validated.success) {
    return {
      errors: validated.error.flatten().fieldErrors,
      success: false,
    };
  }

  // Honeypot : on renvoie un succès factice pour ne pas renseigner le robot.
  if (validated.data.website) {
    return { success: true, message: "Merci, vérifiez votre boîte mail." };
  }

  const { email } = validated.data;

  captureSubscriber({
    email,
    name: email,
    source: "newsletter",
  });

  opServer.track("newsletter_subscribed", {});

  return {
    success: true,
    message: "Merci ! Vérifiez votre boîte mail pour confirmer.",
  };
}
