using FluentValidation;
namespace DocumentOperator.Application.ValidatePdfA.Validators;
///
/// Validator for ValidatePdfAQuery
/// Ensures exactly ONE input format is provided (PdfBytes XOR Base64Pdf)
///
public class ValidatePdfAQueryValidator : AbstractValidator
{
public ValidatePdfAQueryValidator()
{
RuleFor(x => x)
.Must(x => (x.PdfBytes != null && x.PdfBytes.Length > 0) ^
!string.IsNullOrWhiteSpace(x.Base64Pdf))
.WithMessage("Either PdfBytes or Base64Pdf must be provided, but not both");
When(x => !string.IsNullOrWhiteSpace(x.Base64Pdf), () =>
{
RuleFor(x => x.Base64Pdf!)
.Must(BeValidBase64)
.WithMessage("Base64Pdf must be a valid Base64 string");
});
When(x => x.PdfBytes != null, () =>
{
RuleFor(x => x.PdfBytes!)
.Must(bytes => bytes.Length > 0)
.WithMessage("PdfBytes cannot be empty");
});
}
private static bool BeValidBase64(string base64)
{
if (string.IsNullOrWhiteSpace(base64))
return false;
try
{
Convert.FromBase64String(base64);
return true;
}
catch (FormatException)
{
return false;
}
}
}