namespace foodmarket.Application.Common;

/// <summary>Серверная валидация и нормализация телефонов Казахстана.
/// Принимает любое форматирование (+7 700 123-45-67, 8 (700) 1234567, ...),
/// оставляет только цифры, ведущая «8» переписывается в «7».
/// Валидно: ровно 11 цифр, начинается с «77» — мобильный код KZ.
/// «79…» (РФ) и прочие отвергаются.
///
/// Используется на всех endpoint'ах, принимающих phone — defense-in-depth
/// к фронт-валидации (PhoneInput / validatePhone).</summary>
public static class PhoneNormalization
{
    public const string ErrorMessage = "Введите корректный номер Казахстана. Пример: +7 700 123 45 67";

    /// <summary>Возвращает нормализованный номер вида "+77001234567" если phone валиден,
    /// null если не валиден. Пустой ввод возвращает null без ошибки —
    /// проверку «обязательно ли» делает вызывающая сторона.</summary>
    public static string? TryNormalizeKz(string? raw)
    {
        if (string.IsNullOrWhiteSpace(raw)) return null;
        var digits = new string(raw.Where(char.IsDigit).ToArray());
        if (digits.Length == 11 && digits[0] == '8') digits = "7" + digits[1..];
        if (digits.Length != 11 || !digits.StartsWith("77")) return null;
        return "+" + digits;
    }

    /// <summary>True если phone валиден или null/пусто (опциональное поле).
    /// False — только если непустой ввод не парсится. Удобно для контроллеров,
    /// которые принимают phone как опциональный.</summary>
    public static bool IsValidOrEmpty(string? raw)
    {
        if (string.IsNullOrWhiteSpace(raw)) return true;
        return TryNormalizeKz(raw) is not null;
    }
}
