using FluentValidation;
using PARR.API.Contracts.V1.Requests;
using PARR.Domain.Enums;

namespace PARR.API.Validators
{
    public class JobAutoControlRequestValidator : AbstractValidator<JobAutoControlRequest>
    {
        public JobAutoControlRequestValidator()
        {
            RuleFor(t => t.EkMasks).Must(items =>
                 items.Count(t => t.Trim().Length > 0) > 0
            ).WithMessage("Должна быть указана хотя бы одна маска ЭК");

            RuleFor(t => t.EnabledEkStatuses).Must(
                    items => items.Distinct().Count() == items.Count()
                ).WithMessage("Статусы ЭК не должны повторяться");

            RuleFor(t => t.EnabledEkStatuses).Must(items =>
                {
                    return !items.Any(item => !Enum.IsDefined(typeof(EkStatusEnum), item)) && !items.Any(t => t == 0);
                })
                .WithMessage($"Допустимые значения: {(int)EkStatusEnum.New} ({EkStatusEnum.New}), " +
                                                                                            $"{(int)EkStatusEnum.Preapre} ({EkStatusEnum.Preapre}), " +
                                                                                            $"{(int)EkStatusEnum.Exploitation} ({EkStatusEnum.Exploitation}), " +
                                                                                            $"{(int)EkStatusEnum.Repair} ({EkStatusEnum.Repair}), " +
                                                                                            $"{(int)EkStatusEnum.Reserve} ({EkStatusEnum.Reserve}), " +
                                                                                            $"{(int)EkStatusEnum.OutOfService} ({EkStatusEnum.OutOfService}), " +
                                                                                            $"{(int)EkStatusEnum.Test} ({EkStatusEnum.Test}), " +
                                                                                            $"{(int)EkStatusEnum.Development} ({EkStatusEnum.Development})");
        }
    }
}
