package dev.lions.utils;

import lombok.Getter;
import lombok.Setter;
import lombok.AllArgsConstructor;
import lombok.Builder;
import java.io.Serializable;

/**
 * Représente une colonne dans une table de données dynamique.
 * Utilisée pour la configuration et le rendu des tableaux de données.
 */
@Getter
@Setter
@AllArgsConstructor
@Builder
public class Column implements Serializable {
  private static final long serialVersionUID = 1L;

  private String header;
  private String field;
  private String width;
  private boolean sortable;
  private boolean filterable;
  private String styleClass;
  private ColumnType type;

  @Builder.Default
  private boolean visible = true;

  @Builder.Default
  private int order = 0;

  public Column(String header, String field, Object o, boolean b, boolean b1, Object o1,
                ColumnType columnType) {
  }

  public enum ColumnType {
    TEXT("text"),
    NUMBER("number"),
    DATE("date"),
    BOOLEAN("boolean"),
    CUSTOM("custom");

    private final String value;

    ColumnType(String value) {
      this.value = value;
    }

    public String getValue() {
      return value;
    }
  }

  public Column(String header, String field) {
    this(header, field, null, true, true, null, ColumnType.TEXT);
  }

  public String getStyleClassWithDefault() {
    return styleClass != null ? styleClass : getDefaultStyleClass();
  }

  private String getDefaultStyleClass() {
    return "column-" + type.getValue();
  }
}