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

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

import de.ivu.elect.business.gebietsbaum.control.WasGebietCreate;
import de.ivu.elect.business.gebietsbaum.entity.Gebiet;
import de.ivu.elect.business.gebietsbaum.entity.GebietUebernehmenContext;
import de.ivu.elect.business.gebietsbaum.entity.Wahldurchfuehrungsgebiet;
import de.ivu.elect.business.stimmeingabe.entity.Ergebniseingabestatus;
import de.ivu.elect.business.wahl.entity.Wahl;

@Stateless
@Specializes
public class WasGebietUebernehmen extends CoreGebietUebernehmen {

  @Inject
  private transient WasGebietCreate wasGebietCreate;

  public WasGebietUebernehmen() {
    super();
  }

  @Override
  protected void postPersistiereNeuesGebiet(Gebiet neuesGebiet) {
    super.postPersistiereNeuesGebiet(neuesGebiet);

    wasGebietCreate.createVerantwortlichBerichtetAn(neuesGebiet); // ELECTKOM-490 und ELECT-8716
  }

  @Override
  protected void kopiereGebietseigenschaftenFuerWahl(Gebiet quelle, Gebiet ziel, Wahl zielWahl, GebietUebernehmenContext uebernehmenContext) {
    super.kopiereGebietseigenschaftenFuerWahl(quelle, ziel, zielWahl, uebernehmenContext);
    if (ziel.isInstanceOf(Wahldurchfuehrungsgebiet.class)) {
      Wahldurchfuehrungsgebiet entity = ziel.castTo(Wahldurchfuehrungsgebiet.class).getEntity();
      // ELECTKOM-100
      if (!uebernehmenContext.isErfassungsstatusUebernehmen()) {
        entity.setEingabestatusVorlaeufig(Ergebniseingabestatus.EINGABE_MOEGLICH);
        entity.setEingabestatusEndgueltig(Ergebniseingabestatus.EINGABE_MOEGLICH);
      }

      if (!uebernehmenContext.isAwerteUebernehmen()) {
        entity.setAnzahlWahlberechtigteOhneWahlschein(null);
        entity.setAnzahlWahlberechtigteMitWahlschein(null);
        entity.setAnzahlWahlberechtigteNichtImWaehlerverzeichnis(null);
      }
    }
  }

  @Override
  protected void kopiereGebiet(Gebiet quelle, Gebiet ziel, GebietUebernehmenContext uebernehmenContext) {

    Ergebniseingabestatus eingabestatusVorlaeufig = null;
    Ergebniseingabestatus eingabestatusEndgueltig = null;
    Long anzahlWahlberechtigteOhneWahlschein = null;
    Long anzahlWahlberechtigteMitWahlschein = null;
    Long anzahlWahlberechtigteNichtImWaehlerverzeichnis = null;

    if (ziel.isInstanceOf(Wahldurchfuehrungsgebiet.class)) {
      Wahldurchfuehrungsgebiet entity = ziel.castTo(Wahldurchfuehrungsgebiet.class).getEntity();
      eingabestatusVorlaeufig = entity.getEingabestatusVorlaeufig();
      eingabestatusEndgueltig = entity.getEingabestatusEndgueltig();
      anzahlWahlberechtigteOhneWahlschein = entity.getAnzahlWahlberechtigteOhneWahlschein();
      anzahlWahlberechtigteMitWahlschein = entity.getAnzahlWahlberechtigteMitWahlschein();
      anzahlWahlberechtigteNichtImWaehlerverzeichnis = entity.getAnzahlWahlberechtigteNichtImWaehlerverzeichnis();
    }

    super.kopiereGebiet(quelle, ziel, uebernehmenContext);

    if (ziel.isInstanceOf(Wahldurchfuehrungsgebiet.class)) {
      Wahldurchfuehrungsgebiet entity = ziel.castTo(Wahldurchfuehrungsgebiet.class).getEntity();
      // ELECTKOM-945
      if (!uebernehmenContext.isErfassungsstatusUebernehmen()) {
        entity.setEingabestatusVorlaeufig(eingabestatusVorlaeufig);
        entity.setEingabestatusEndgueltig(eingabestatusEndgueltig);
      }
      if (!uebernehmenContext.isAwerteUebernehmen()) {
        entity.setAnzahlWahlberechtigteOhneWahlschein(anzahlWahlberechtigteOhneWahlschein);
        entity.setAnzahlWahlberechtigteMitWahlschein(anzahlWahlberechtigteMitWahlschein);
        entity.setAnzahlWahlberechtigteNichtImWaehlerverzeichnis(anzahlWahlberechtigteNichtImWaehlerverzeichnis);
      }
    }

  }
}
