package dev.lions.unionflow.server.repository;

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

/** Repository des délégations temporaires de rôle. */
@ApplicationScoped
public class RoleDelegationRepository implements PanacheRepositoryBase<RoleDelegation, UUID> {

  /** Délégations actives reçues par un user dans une organisation à l'instant donné. */
  public List<RoleDelegation> findActiveByDelegataire(UUID userId, UUID organisationId,
                                                       LocalDateTime now) {
    return list(
        "delegataireUserId = ?1 AND organisationId = ?2 "
            + "AND statut = 'ACTIVE' AND dateDebut <= ?3 AND dateFin > ?3",
        userId, organisationId, now);
  }

  /** Toutes les délégations expirées encore en statut ACTIVE → à nettoyer par scheduler. */
  public List<RoleDelegation> findExpired(LocalDateTime now) {
    return list("statut = 'ACTIVE' AND dateFin <= ?1", now);
  }

  /** Liste paginable / filtrable par organisation pour vue admin (Sprint 10). */
  public List<RoleDelegation> findByOrganisation(UUID organisationId) {
    return list("organisationId = ?1 ORDER BY dateDebut DESC", organisationId);
  }
}
