import { z } from "zod";

const optionalText = (maximum: number) => z.string().trim().max(maximum);

function normalizeWebsite(value: unknown) {
  if (typeof value !== "string") return value;
  const trimmed = value.trim();
  if (!trimmed || /^https?:\/\//i.test(trimmed)) return trimmed;
  return `https://${trimmed}`;
}

export const userEmailSignatureSchema = z
  .object({
    enabled: z.boolean(),
    displayName: optionalText(150),
    jobTitle: optionalText(255),
    phone: optionalText(50),
    company: optionalText(150),
    address: optionalText(255),
    website: z.preprocess(
      normalizeWebsite,
      z
        .string()
        .trim()
        .max(255)
        .refine(
          (value) => !value || /^https?:\/\/[^\s]+$/i.test(value),
          "L’adresse du site web est invalide.",
        ),
    ),
    logo: z.enum(["ENVIE_2E", "ENVIE_MAGASINS", "NONE"]),
  })
  .superRefine((value, context) => {
    if (value.enabled && !value.displayName) {
      context.addIssue({
        code: "custom",
        path: ["displayName"],
        message: "Le nom est obligatoire lorsque la signature est activée.",
      });
    }
  });

export type UserEmailSignatureInput = z.infer<
  typeof userEmailSignatureSchema
>;
