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

import java.util.List;

import javax.ejb.Stateless;
import javax.enterprise.inject.Specializes;
import javax.inject.Inject;

import de.ivu.elect.business.gebietsbaum.entity.Gebiet;
import de.ivu.elect.business.gebietsbaum.entity.NlGebiet;
import de.ivu.elect.business.gebietsbaum.entity.NlGebietKorrekturenStimmeingabenStatus;
import de.ivu.elect.business.gebietsbaum.entity.Wahldurchfuehrungsgebiet;
import de.ivu.elect.business.stimmeingabe.boundary.NlErgebniseingangKonfiguration;
import de.ivu.elect.business.stimmeingabe.control.LetzterEingangCache;
import de.ivu.elect.business.wahl.entity.Wahl;

@Stateless
@Specializes
public class NlWasGebietEdit extends WasGebietEdit {

  @Inject
  private transient LetzterEingangCache letzterEingangCache;

  public NlWasGebietEdit() {
    super();
  }

  public void saveKorrekturenStimmeingabenStatus(Gebiet template, NlGebietKorrekturenStimmeingabenStatus korrekturenStimmeingabenStatus) {
    Gebiet gebiet = getAttachedEntity(template);
    new NlGebiet(gebiet).setKorrekturenStimmeingabenStatus(korrekturenStimmeingabenStatus);

    dao.persist(gebiet);
  }

  public void saveAll(List<Gebiet> gebiete) {
    for (var gebiet : gebiete) {
      save(gebiet);
    }
  }

  public void loescheWahlberechtiteErfassungsgebiete(Wahl wahl) {
    for (var gebiet : dao.findByWahl(wahl)) {
      if (gebiet.isErfassungsgebiet() && !isEingangVorhanden(gebiet, letzterEingangCache)) {
        gebiet.castTo(Wahldurchfuehrungsgebiet.class).getEntity().setAnzahlWahlberechtigteOhneWahlschein(null);
      }
    }
  }

  public static boolean isEingangVorhanden(Gebiet gebiet, LetzterEingangCache letzterEingangCache) {
    // ELECT-15244
    //noinspection ConstantConditions
    return gebiet.isErfassungsgebiet() && letzterEingangCache.getLetzterEingang(gebiet.getWahl().getPk(), gebiet.getPk(), NlErgebniseingangKonfiguration.ERGEBNISEINGANGSART).isEingangVorhanden();
  }
}
