export function cleanPhoneDigits(value?: string) {
  const digits = String(value || "").replace(/\D/g, "").slice(0, 18);
  if (!digits || /^0+$/.test(digits) || digits === "27000000000") return "";
  return digits;
}

export function safeEmailAddress(value?: string) {
  const email = String(value || "").replace(/[\r\n<>]/g, " ").trim().toLowerCase();
  return email.length <= 254 && /^[^\s@<>"'()\\]+@[^\s@<>"'()\\]+\.[^\s@<>"'()\\]+$/.test(email) ? email : "";
}

export function safeExternalHref(value?: string) {
  const raw = String(value || "").trim();
  if (!raw) return "";
  if (raw.startsWith("/")) return raw.startsWith("//") || raw.includes("..") ? "" : raw;
  try {
    const url = new URL(raw);
    return url.protocol === "https:" || url.protocol === "http:" ? url.toString() : "";
  } catch {
    return "";
  }
}

export function mailtoHref(email: string, params: Record<string, string>) {
  const safe = safeEmailAddress(email);
  if (!safe) return "";
  return `mailto:${safe}?${new URLSearchParams(params).toString()}`;
}

export function internationalPhoneDigits(phone: string) {
  let digits = cleanPhoneDigits(phone);
  if (!digits) return "";
  if (digits.length === 10 && digits.startsWith("0")) digits = `27${digits.slice(1)}`;
  if (digits.length === 9 && !digits.startsWith("27")) digits = `27${digits}`;
  return digits;
}

export function telHref(phone: string) {
  const digits = internationalPhoneDigits(phone);
  return digits ? `tel:+${digits}` : "";
}


export function whatsappHref(phone: string, message?: string) {
  const digits = internationalPhoneDigits(phone);
  if (!digits) return "";
  const text = String(message || "").trim().slice(0, 600);
  const params = text ? `?text=${encodeURIComponent(text)}` : "";
  return `https://wa.me/${digits}${params}`;
}
