package dev.lions.unionflow.server.repository;

import dev.lions.unionflow.server.entity.ConfigurationWave;
import io.quarkus.hibernate.orm.panache.PanacheRepositoryBase;
import jakarta.enterprise.context.ApplicationScoped;
import java.util.List;
import java.util.Optional;
import java.util.UUID;

/**
 * Repository pour l'entité ConfigurationWave
 *
 * @author UnionFlow Team
 * @version 3.0
 * @since 2025-01-29
 */
@ApplicationScoped
public class ConfigurationWaveRepository implements PanacheRepositoryBase<ConfigurationWave, UUID> {

  /**
   * Trouve une configuration Wave par son UUID
   *
   * @param id UUID de la configuration
   * @return Configuration ou Optional.empty()
   */
  public Optional<ConfigurationWave> findConfigurationWaveById(UUID id) {
    return find("id = ?1 AND actif = true", id).firstResultOptional();
  }

  /**
   * Trouve une configuration par sa clé
   *
   * @param cle Clé de configuration
   * @return Configuration ou Optional.empty()
   */
  public Optional<ConfigurationWave> findByCle(String cle) {
    return find("cle = ?1 AND actif = true", cle).firstResultOptional();
  }

  /**
   * Trouve toutes les configurations d'un environnement
   *
   * @param environnement Environnement (SANDBOX, PRODUCTION, COMMON)
   * @return Liste des configurations
   */
  public List<ConfigurationWave> findByEnvironnement(String environnement) {
    return find("environnement = ?1 AND actif = true", environnement).list();
  }

  /**
   * Trouve toutes les configurations actives
   *
   * @return Liste des configurations actives
   */
  public List<ConfigurationWave> findAllActives() {
    return find("actif = true ORDER BY cle ASC").list();
  }
}



