package dev.lions.unionflow.server.repository;

import dev.lions.unionflow.server.entity.Devise;
import dev.lions.unionflow.server.entity.TauxChange;
import io.quarkus.hibernate.orm.panache.PanacheRepositoryBase;
import jakarta.enterprise.context.ApplicationScoped;
import java.time.LocalDate;
import java.util.Optional;
import java.util.UUID;

/** Repository des taux de change historisés. */
@ApplicationScoped
public class TauxChangeRepository implements PanacheRepositoryBase<TauxChange, UUID> {

  /** Taux exact pour une paire à une date donnée. */
  public Optional<TauxChange> trouverExact(Devise source, Devise cible, LocalDate date) {
    return find("deviseSource = ?1 AND deviseCible = ?2 AND dateValidite = ?3",
        source, cible, date).firstResultOptional();
  }

  /** Taux le plus récent pour une paire (≤ date donnée). */
  public Optional<TauxChange> trouverPlusRecent(Devise source, Devise cible, LocalDate dateMax) {
    return find("deviseSource = ?1 AND deviseCible = ?2 AND dateValidite <= ?3 "
            + "ORDER BY dateValidite DESC", source, cible, dateMax)
        .firstResultOptional();
  }
}
