using System.Collections.Immutable;

namespace Phantom.Server.Services.Users;

public abstract record SetUserPasswordError {
	private SetUserPasswordError() {}

	public sealed record UserNotFound : SetUserPasswordError;

	public sealed record PasswordIsInvalid(ImmutableArray<PasswordRequirementViolation> Violations) : SetUserPasswordError;
	
	public sealed record UnknownError : SetUserPasswordError;
}

public static class SetUserPasswordErrorExtensions {
	public static string ToSentences(this SetUserPasswordError error, string delimiter) {
		return error switch {
			SetUserPasswordError.UserNotFound        => "User not found.",
			SetUserPasswordError.PasswordIsInvalid e => string.Join(delimiter, e.Violations.Select(static v => v.ToSentence())),
			_                                        => "Unknown error."
		};
	}
}