using FluentValidation;
using IamService.API.Application.Commands.Auth;

namespace IamService.API.Application.Validations;

/// <summary>
/// EN: Validator for ChangePasswordCommand.
/// VI: Validator cho ChangePasswordCommand.
/// </summary>
public class ChangePasswordCommandValidator : AbstractValidator<ChangePasswordCommand>
{
    public ChangePasswordCommandValidator()
    {
        RuleFor(x => x.UserId)
            .NotEmpty().WithMessage("User ID is required / User ID là bắt buộc");

        RuleFor(x => x.CurrentPassword)
            .NotEmpty().WithMessage("Current password is required / Mật khẩu hiện tại là bắt buộc");

        RuleFor(x => x.NewPassword)
            .NotEmpty().WithMessage("New password is required / Mật khẩu mới là bắt buộc")
            .MinimumLength(8).WithMessage("New password must be at least 8 characters / Mật khẩu mới phải có ít nhất 8 ký tự")
            .Matches("[A-Z]").WithMessage("New password must contain at least one uppercase letter / Mật khẩu mới phải chứa ít nhất một chữ hoa")
            .Matches("[a-z]").WithMessage("New password must contain at least one lowercase letter / Mật khẩu mới phải chứa ít nhất một chữ thường")
            .Matches("[0-9]").WithMessage("New password must contain at least one digit / Mật khẩu mới phải chứa ít nhất một chữ số")
            .Matches("[^a-zA-Z0-9]").WithMessage("New password must contain at least one special character / Mật khẩu mới phải chứa ít nhất một ký tự đặc biệt")
            .NotEqual(x => x.CurrentPassword).WithMessage("New password must be different from current password / Mật khẩu mới phải khác mật khẩu hiện tại");
    }
}
