package de.ivu.elect.business.gebietsbaum.boundary;

import javax.annotation.Nullable;
import javax.inject.Inject;
import javax.persistence.NoResultException;

import de.ivu.elect.business.gebietsbaum.entity.Gebiet;
import de.ivu.elect.business.gebietsbaum.entity.Gebietsart;
import de.ivu.elect.business.mandant.entity.Mandant;
import de.ivu.elect.business.wahl.entity.Wahl;
import de.ivu.elect.business.wahl.entity.Wahltermin;

public class GebietSearchHelper {

  @Inject
  private GebietDAO gebietDAO;

  @Inject
  private GebietsartSearchHelper gebietsartSearchHelper;

  @Nullable
  public Gebiet attachGebiet(Wahltermin wahltermin, Wahl wahl, Gebiet gebiet) {
    try {
      Gebietsart gebietsart = findeGebietsart(gebiet, wahltermin.getMandant());
      if (wahl == null) {
        return gebietDAO.findByWahlterminAndNummerAndGebietsart(wahltermin, gebiet.getNummer(), gebietsart);
      }
      return gebietDAO.findByWahlAndNummerAndGebietsart(wahl, gebiet.getNummer(), gebietsart);
    } catch (NoResultException ignored) {
      return null;
    }
  }

  private Gebietsart findeGebietsart(Gebiet gebiet, Mandant mandant) {
    return gebietsartSearchHelper.attachGebietsartWithTransactionalDAO(mandant, gebiet.getGebietsart());
  }


}
