package dev.lions.unionflow.server.entity;

import jakarta.persistence.*;
import jakarta.validation.constraints.*;
import lombok.*;

/**
 * Catalogue des modules métier activables par type d'organisation.
 *
 * <p>Géré uniquement par le Super Admin UnionFlow.
 * Les organisations ne peuvent pas créer de nouveaux modules.
 *
 * <p>Table : {@code modules_disponibles}
 */
@Entity
@Table(
    name = "modules_disponibles",
    indexes = {
      @Index(name = "idx_module_code",  columnList = "code", unique = true),
      @Index(name = "idx_module_actif", columnList = "actif")
    })
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@EqualsAndHashCode(callSuper = true)
public class ModuleDisponible extends BaseEntity {

  @NotBlank
  @Column(name = "code", unique = true, nullable = false, length = 50)
  private String code;

  @NotBlank
  @Column(name = "libelle", nullable = false, length = 150)
  private String libelle;

  @Column(name = "description", columnDefinition = "TEXT")
  private String description;

  /**
   * JSON array des types d'organisations compatibles.
   * Exemple : ["MUTUELLE_SANTE","ONG"] ou ["ALL"] pour tous.
   */
  @Column(name = "types_org_compatibles", columnDefinition = "TEXT")
  private String typesOrgCompatibles;

  @Builder.Default
  @Column(name = "ordre_affichage", nullable = false)
  private Integer ordreAffichage = 0;

  public boolean estCompatibleAvec(String typeOrganisation) {
    if (typesOrgCompatibles == null) return false;
    return typesOrgCompatibles.contains("ALL")
        || typesOrgCompatibles.contains(typeOrganisation);
  }
}
