using System.Text.RegularExpressions;

namespace Wallet;

public partial class DiversityBonusRule : 
    IPasswordRule
{
    public int CalculateScore(string password)
    {
        bool hasUppercase = UppercaseRegex().IsMatch(password);
        bool hasLowercase = LowercaseRegex().IsMatch(password);
        bool hasDigit = DigitRegex().IsMatch(password);
        bool hasSpecialChar = SpecialCharRegex().IsMatch(password);

        return (hasUppercase && hasLowercase && hasDigit && hasSpecialChar) ? 2 : 0;
    }

    [GeneratedRegex(@"[A-Z]")]
    private static partial Regex UppercaseRegex();

    [GeneratedRegex(@"[a-z]")]
    private static partial Regex LowercaseRegex();

    [GeneratedRegex(@"\d")]
    private static partial Regex DigitRegex();

    [GeneratedRegex(@"[^a-zA-Z0-9]")]
    private static partial Regex SpecialCharRegex();
}