using Back.Services;
using FluentValidation;
using Shared.DTOs;
using System;

namespace Back.Validations
{
    public enum ActionMobileValidation
    {
        No,
        ExistMobile,
        nonExistMobile,

    }
    public class MobileValidation : AbstractValidator<Tuple<string, ActionMobileValidation>>
    {
        public MobileValidation(servCompany servCompany,servUser servUser)
        {
            CascadeMode = CascadeMode.Stop;
            RuleFor(m => m.Item1)
                .NotEmpty().WithMessage("موبایل نمی تواند باشد")
                .NotNull().WithMessage("موبایل نمی تواند باشد")
                .Length(11).WithMessage("فرمت موبایل صحیح نمی باشد")
                .Must(m => m.StartsWith("09")).WithMessage("فرمت موبایل صحیح نمی باشد");
            RuleFor(m => m)
          .Custom((model, context) => {
              if (model.Item2== ActionMobileValidation.ExistMobile)
              {
                  if (!servCompany.ExistMobileInCompany(model.Item1).Result)
                  {
                      context.AddFailure("این موبایل یافت نشد");
                  }
              }
              if (model.Item2 == ActionMobileValidation.nonExistMobile)
              {
                  if (servCompany.ExistMobileInCompany(model.Item1,false).Result)
                      context.AddFailure("این موبایل در سیستم تعریف شده");
                  
                  else
                  {
                      if (servUser.ExistMobileInUser(model.Item1, false).Result)
                          context.AddFailure("این موبایل در سیستم تعریف شده"); 
                  }
              }


          });
        }
    }
}
