using System.Text.RegularExpressions;

namespace CMSMicroservice.Application.Common;

/// <summary>
/// نرمال‌سازی و اعتبارسنجی شماره شبا ایران (IR + 24 رقم).
/// </summary>
public static class IbanNormalizer
{
    private static readonly Regex IranianIbanRegex = new(@"^IR\d{24}$", RegexOptions.Compiled);

    /// <summary>
    /// فاصله و خط تیره را حذف می‌کند، به حروف بزرگ تبدیل می‌کند و یک پیشوند IR می‌گذارد.
    /// در صورت نامعتبر بودن، null برمی‌گرداند.
    /// </summary>
    public static string? TryNormalize(string? iban)
    {
        if (string.IsNullOrWhiteSpace(iban))
            return null;

        var normalized = iban.Trim().ToUpperInvariant()
            .Replace(" ", "", StringComparison.Ordinal)
            .Replace("-", "", StringComparison.Ordinal);

        if (normalized.StartsWith("IR", StringComparison.Ordinal))
            normalized = normalized[2..];

        normalized = "IR" + normalized;

        return IranianIbanRegex.IsMatch(normalized) ? normalized : null;
    }

    public static bool IsValid(string? iban) => TryNormalize(iban) is not null;
}
