// Validateurs partagés du répertoire (annuaire). Chaque validateur considère
// une valeur VIDE comme valide : les champs email/téléphone/site web sont
// facultatifs — la validation ne porte que sur le format quand c'est renseigné.

/** Email basique (présence d'un @ entouré de caractères, un point dans le domaine). */
const EMAIL_RE = /^[^\s@]+@[^\s@]+\.[^\s@]+$/

/**
 * Téléphone français : 10 chiffres commençant par 0 (ex. `0549200910`) — format
 * saisi par l'utilisateur, sans séparateurs — ou notation internationale
 * `+33XXXXXXXXX` (9 chiffres après l'indicatif). Les espaces, points et tirets
 * sont tolérés à la frappe (retirés avant contrôle).
 */
const FR_PHONE_NATIONAL_RE = /^0\d{9}$/
const FR_PHONE_INTL_RE = /^\+33\d{9}$/

const URL_RE = /^https?:\/\/[^\s.]+\.[^\s]+$/

/** Retire les séparateurs usuels d'un numéro (espaces, points, tirets, parenthèses). */
export function stripPhoneSeparators(value: string): string {
    return value.replace(/[\s.\-()]/g, '')
}

export function isValidEmail(value: string | null | undefined): boolean {
    const v = (value ?? '').trim()
    if (v === '') return true
    return EMAIL_RE.test(v)
}

export function isValidFrPhone(value: string | null | undefined): boolean {
    const v = stripPhoneSeparators((value ?? '').trim())
    if (v === '') return true
    return FR_PHONE_NATIONAL_RE.test(v) || FR_PHONE_INTL_RE.test(v)
}

export function isValidUrl(value: string | null | undefined): boolean {
    const v = (value ?? '').trim()
    if (v === '') return true
    return URL_RE.test(v)
}
