namespace Phantom.Server.Services.Users;

public abstract record PasswordRequirementViolation {
	private PasswordRequirementViolation() {}

	public sealed record TooShort(int MinimumLength) : PasswordRequirementViolation;

	public sealed record LowercaseLetterRequired : PasswordRequirementViolation;

	public sealed record UppercaseLetterRequired : PasswordRequirementViolation;

	public sealed record DigitRequired : PasswordRequirementViolation;
}

public static class PasswordRequirementViolationExtensions {
	public static string ToSentence(this PasswordRequirementViolation violation) {
		return violation switch {
			PasswordRequirementViolation.TooShort v              => "Password must be at least " + v.MinimumLength + " character(s) long.",
			PasswordRequirementViolation.LowercaseLetterRequired => "Password must contain a lowercase letter.",
			PasswordRequirementViolation.UppercaseLetterRequired => "Password must contain an uppercase letter.",
			PasswordRequirementViolation.DigitRequired           => "Password must contain a digit.",
			_                                                    => "Unknown error."
		};
	}
}