package dev.lions.unionflow.server.repository;

import dev.lions.unionflow.server.entity.LigneEcriture;
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é LigneEcriture
 *
 * @author UnionFlow Team
 * @version 3.0
 * @since 2025-01-29
 */
@ApplicationScoped
public class LigneEcritureRepository implements PanacheRepositoryBase<LigneEcriture, UUID> {

  /**
   * Trouve une ligne d'écriture par son UUID
   *
   * @param id UUID de la ligne d'écriture
   * @return Ligne d'écriture ou Optional.empty()
   */
  public Optional<LigneEcriture> findLigneEcritureById(UUID id) {
    return find("id = ?1", id).firstResultOptional();
  }

  /**
   * Trouve toutes les lignes d'une écriture
   *
   * @param ecritureId ID de l'écriture
   * @return Liste des lignes
   */
  public List<LigneEcriture> findByEcritureId(UUID ecritureId) {
    return find("ecriture.id = ?1 ORDER BY numeroLigne ASC", ecritureId).list();
  }

  /**
   * Trouve toutes les lignes d'un compte comptable
   *
   * @param compteComptableId ID du compte comptable
   * @return Liste des lignes
   */
  public List<LigneEcriture> findByCompteComptableId(UUID compteComptableId) {
    return find("compteComptable.id = ?1 ORDER BY ecriture.dateEcriture DESC, numeroLigne ASC", compteComptableId)
        .list();
  }
}



