using FluentValidation;
using System;
using System.Collections.Generic;

namespace FluentValidationExample
{
    public class ZamowienieValidator : AbstractValidator<Zamowienie>
    {
        public ZamowienieValidator()
        {
            RuleFor(m => m.Numer).NotNull().MinimumLength(6).MaximumLength(6).WithMessage("Numer musi mieć 6 znaków");
            RuleFor(m => m.Numer).Matches("[A-Z]{3}[0-9]{3}");
            RuleFor(m => m.Odbiorca).NotNull().MinimumLength(3).MaximumLength(100);
            RuleFor(m => m.AdresDostawy).NotNull().MinimumLength(3).MaximumLength(100);
            RuleFor(m => m.Email).EmailAddress();
            RuleFor(m => m).Must(x => DataZlozeniaValidation(x.DataZlozenia, x.DataWyslania)).WithMessage("Data złożenia nie może być późniejsza niż data wysłania.");
            RuleFor(m => m).Must(x => DataWyslaniaValidation(x.DataWyslania, x.DataDostarczenia)).WithMessage("Data wysłania nie może być późniejsza niż data dostarczenia.");
        }

        public bool DataZlozeniaValidation(DateTime DataZlozenia, DateTime DataWyslania)
        {
            return DataZlozenia <= DataWyslania;
        }
        public bool DataWyslaniaValidation(DateTime DataWyslania, DateTime DataDostarczenia)
        {
            return DataWyslania < DataDostarczenia;
        }
    }
}
