using FluentValidation;
using TakeoutSaaS.Application.App.Personal.Queries;

namespace TakeoutSaaS.Application.App.Personal.Validators;

/// <summary>
/// 更新个人中心可见角色配置命令校验器。
/// </summary>
public sealed class UpdatePersonalVisibilityRoleConfigCommandValidator : AbstractValidator<UpdatePersonalVisibilityRoleConfigCommand>
{
    /// <summary>
    /// 初始化校验规则。
    /// </summary>
    public UpdatePersonalVisibilityRoleConfigCommandValidator()
    {
        RuleFor(x => x.QuotaVisibleRoleCodes)
            .NotEmpty()
            .Must(HasNoBlankValue)
            .WithMessage("配额可见角色列表不能为空且不能包含空白角色编码");

        RuleFor(x => x.BillingVisibleRoleCodes)
            .NotEmpty()
            .Must(HasNoBlankValue)
            .WithMessage("账单可见角色列表不能为空且不能包含空白角色编码");
    }

    private static bool HasNoBlankValue(IEnumerable<string> roleCodes)
    {
        // 1. 校验角色编码列表不包含空值
        return roleCodes.All(static x => !string.IsNullOrWhiteSpace(x));
    }
}
