using FluentValidation;
using PromotionService.API.Application.Commands;

namespace PromotionService.API.Application.Validations;

/// <summary>
/// EN: Validator for UpdateCampaignCommand.
/// VI: Validator cho UpdateCampaignCommand.
/// </summary>
public class UpdateCampaignCommandValidator : AbstractValidator<UpdateCampaignCommand>
{
    public UpdateCampaignCommandValidator()
    {
        RuleFor(x => x.CampaignId)
            .NotEmpty().WithMessage("Campaign ID is required / ID chiến dịch là bắt buộc");

        RuleFor(x => x.Name)
            .MaximumLength(200).WithMessage("Campaign name max 200 chars / Tên chiến dịch tối đa 200 ký tự")
            .When(x => x.Name != null);

        RuleFor(x => x.Description)
            .MaximumLength(1000).WithMessage("Description max 1000 chars / Mô tả tối đa 1000 ký tự")
            .When(x => x.Description != null);

        RuleFor(x => x.EndDate)
            .GreaterThan(x => x.StartDate!.Value)
            .WithMessage("End date must be after start date / Ngày kết thúc phải sau ngày bắt đầu")
            .When(x => x.StartDate.HasValue && x.EndDate.HasValue);

        RuleFor(x => x.MaxPerUser)
            .InclusiveBetween(1, 100).WithMessage("Max per user must be 1-100 / Tối đa mỗi người phải từ 1-100")
            .When(x => x.MaxPerUser.HasValue);
    }
}
