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

namespace Back.Validations
{
    public class AddOrCodValidation : AbstractValidator<Tuple<int, RCOD, eActionValidation>>
    {
        public AddOrCodValidation(CheckPermission _checkPermission, ServCOD servCod)
        {
            CascadeMode = CascadeMode.Stop;
            When(r => r.Item3 == eActionValidation.add, () =>
            {
                RuleFor(r => r.Item1)
              .Custom((CompanyID, context) =>
              {
                  
                  if (!_checkPermission.AllowAddCODInCompany(CompanyID).Result)
                      context.AddFailure("اضافه کردن کالا محدود شده است");
              });
            });

            When(r => r.Item3 == eActionValidation.update, () =>
            {
                RuleFor(r => r)
                .Custom((model, context) =>
          {
              var companyid = model.Item1;
              if (!model.Item2.ID.HasValue || model.Item2.ID <= 0)
                  context.AddFailure("شناسه کالا نمی تواند خالی باشذ");
              else
              {
                  var customerid = model.Item2.ID.Value;
                  if (!servCod.ExistCodByCompanyID(customerid, companyid).Result)
                      context.AddFailure("کالا با این شناسه یافت نشد");
              }
          });
            });


            RuleFor(r => r.Item2.Title)
                .NotNull().WithMessage("نام نمی تواند خالی باشد")
                .NotEmpty().WithMessage("نام نمی تواند خالی باشد")
                .MinimumLength(3).WithMessage("حداقل کارکتر مجار نام 3 می باشد");
            //
            RuleFor(r => r.Item2.UnitID)
                .NotNull().WithMessage("واحد اندازه گیزی نمی تواند خالی باشد")
                .NotEmpty().WithMessage("واحد اندازه گیزی نمی تواند خالی باشد")
                ;
            RuleFor(r => r.Item2.TaxRate)
               .NotNull().WithMessage("نرخ مالیات نمی تواند خالی باشد")
               .NotEmpty().WithMessage("نرخ مالیات نمی تواند خالی باشد")
               .Custom((TaxRate, context) =>
               {
                   if (TaxRate > 100)
                       context.AddFailure("نرخ مالیات نمی تواند بیشتر از 100 باشد");
                   
               });



        }
    }
}
