"use server";

import { z } from "zod";
import { sendEmail } from "@/lib/email";

const schema = z.object({
  fullName: z.string().min(2, "Nom trop court").max(120),
  company: z.string().max(120).optional(),
  email: z.string().email("Email invalide"),
  phone: z.string().max(40).optional(),
  subject: z.string().min(1, "Sujet manquant"),
  message: z.string().min(20, "Message trop court (20 caractères min)").max(5000),
  consent: z.literal("on", { message: "Vous devez accepter la politique de confidentialité." }),
});

export type SubmitContactInput = {
  fullName: string;
  company?: string;
  email: string;
  phone?: string;
  subject: string;
  message: string;
  consent?: string;
};

export async function submitContactRequest(
  input: SubmitContactInput
): Promise<{ ok: true } | { ok: false; error: string }> {
  const parsed = schema.safeParse(input);
  if (!parsed.success) {
    const first = parsed.error.issues[0];
    return { ok: false, error: first?.message ?? "Données invalides." };
  }
  const d = parsed.data;

  const text = `Nouvelle demande depuis le formulaire de contact Socialex.

Expéditeur :
  Nom        : ${d.fullName}
  Entreprise : ${d.company ?? "—"}
  Email      : ${d.email}
  Téléphone  : ${d.phone ?? "—"}
  Sujet      : ${d.subject}

Message :
${d.message}
`;

  const result = await sendEmail({
    to: process.env.CONTACT_INBOX ?? "contact@socialex.pro",
    subject: `[Contact] ${d.subject} — ${d.fullName}`,
    text,
  });

  if (!result.ok) {
    return { ok: false, error: "L'envoi a échoué. Réessayez plus tard." };
  }
  return { ok: true };
}
