package dev.lions.utils;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
import lombok.Builder;
import java.io.Serializable;
import jakarta.validation.constraints.NotNull;

/**
 * Représente un critère de filtrage pour les recherches avancées.
 * Permet de construire des requêtes de filtrage dynamiques.
 */
@Getter
@Setter
@AllArgsConstructor
@Builder
public class FilterCriteria implements Serializable {
  private static final long serialVersionUID = 1L;

  @NotNull
  private String field;

  @NotNull
  private FilterOperator operator;

  private Object value;

  /**
   * Vérifie si le critère de filtrage est valide.
   * @return true si le critère est valide, false sinon
   */
  public boolean isValid() {
    return field != null && operator != null &&
           (operator != FilterOperator.EQUALS || value != null);
  }

  /**
   * Convertit le critère en chaîne de caractères pour la construction de requêtes.
   * @return la représentation en chaîne du critère
   */
  public String toQueryString() {
    return String.format("%s %s %s", field, operator.getSymbol(), value);
  }
}