namespace CMSMicroservice.Application.UserOrderCQ.Queries.GetOrdersByDateRange;

public class GetOrdersByDateRangeQueryValidator : AbstractValidator<GetOrdersByDateRangeQuery>
{
    public GetOrdersByDateRangeQueryValidator()
    {
        RuleFor(x => x.StartDate)
            .LessThanOrEqualTo(x => x.EndDate)
            .WithMessage("تاریخ شروع باید کوچکتر یا مساوی تاریخ پایان باشد");

        RuleFor(x => x.EndDate)
            .LessThanOrEqualTo(DateTime.UtcNow.AddDays(1))
            .WithMessage("تاریخ پایان نمی‌تواند در آینده باشد");

        RuleFor(x => x.PageIndex)
            .GreaterThan(0)
            .WithMessage("شماره صفحه باید بزرگتر از 0 باشد");

        RuleFor(x => x.PageSize)
            .InclusiveBetween(1, 100)
            .WithMessage("تعداد در صفحه باید بین 1 تا 100 باشد");

        // بازه زمانی نباید بیش از 1 سال باشد
        RuleFor(x => x)
            .Must(x => (x.EndDate - x.StartDate).TotalDays <= 365)
            .WithMessage("بازه زمانی نمی‌تواند بیش از 1 سال باشد");
    }
}
