using FluentValidation;
using AdsAnalyticsService.API.Application.Commands;

namespace AdsAnalyticsService.API.Application.Validations;

/// <summary>
/// EN: Validator for CreateReportCommand.
/// VI: Validator cho CreateReportCommand.
/// </summary>
public class CreateReportCommandValidator : AbstractValidator<CreateReportCommand>
{
    public CreateReportCommandValidator()
    {
        RuleFor(x => x.AdvertiserId)
            .NotEmpty()
            .WithMessage("Advertiser ID is required / Advertiser ID là bắt buộc");

        RuleFor(x => x.Name)
            .NotEmpty()
            .WithMessage("Report name is required / Tên báo cáo là bắt buộc")
            .MaximumLength(200)
            .WithMessage("Report name max 200 characters / Tên báo cáo tối đa 200 ký tự");

        RuleFor(x => x.ReportType)
            .IsInEnum()
            .WithMessage("Report type is invalid / Loại báo cáo không hợp lệ");

        RuleFor(x => x.StartDate)
            .NotEmpty()
            .WithMessage("Start date is required / Ngày bắt đầu là bắt buộc");

        RuleFor(x => x.EndDate)
            .NotEmpty()
            .WithMessage("End date is required / Ngày kết thúc là bắt buộc")
            .GreaterThan(x => x.StartDate)
            .WithMessage("End date must be after start date / Ngày kết thúc phải sau ngày bắt đầu");
    }
}
