
package de.ivu.elect.business.ergebnis.control;

import static de.ivu.elect.jee.entity.EntityUtil.castTo;

import java.util.Collection;
import java.util.Optional;

import de.ivu.elect.business.dokumente.control.ElectDokumentContext;
import de.ivu.elect.business.ergebnis.entity.Ergebnis;
import de.ivu.elect.business.gebietsbaum.boundary.AbstractGebietDAO;
import de.ivu.elect.business.gebietsbaum.entity.Gebiet;
import de.ivu.elect.business.gebietsbaum.entity.Wahldurchfuehrungsgebiet;
import de.ivu.elect.business.stimmeingabe.entity.Ergebniseingabestatus;
import de.ivu.elect.business.wahl.control.AbstractNlExportArtefaktNachSystemExportstatusExportContext;
import de.ivu.elect.business.wahl.entity.AbstractWahlParameterLoader;

public class NlWasErgebnisArtefaktNachGebietErgebniseingabestatusExportContext extends AbstractNlExportArtefaktNachSystemExportstatusExportContext {

  private static final long serialVersionUID = 1L;

  private final Ergebnis ergebnis;

  private final Optional<Ergebniseingabestatus> ergebniseingabestatusExported;

  public NlWasErgebnisArtefaktNachGebietErgebniseingabestatusExportContext(ElectDokumentContext electDokumentContext, AbstractWahlParameterLoader wahlParameterLoader, Collection<Gebiet> gebieteInWahl,
      Ergebnis ergebnis) {
    this(electDokumentContext, wahlParameterLoader, gebieteInWahl, ergebnis, null);
  }

  public NlWasErgebnisArtefaktNachGebietErgebniseingabestatusExportContext(ElectDokumentContext electDokumentContext, AbstractWahlParameterLoader wahlParameterLoader, Collection<Gebiet> gebieteInWahl,
      Ergebnis ergebnis, Ergebniseingabestatus ergebniseingabestatusExported) {
    super(electDokumentContext, wahlParameterLoader, gebieteInWahl);

    this.ergebnis = ergebnis;

    this.ergebniseingabestatusExported = Optional.ofNullable(ergebniseingabestatusExported);
  }

  public Ergebnis getErgebnis() {
    return ergebnis;
  }

  @Override
  public Wahldurchfuehrungsgebiet getWurzelgebiet(AbstractGebietDAO gebietDAO) {
    Gebiet result = super.getWurzelgebiet(gebietDAO);

    if (result != null) {
      return castTo(result, Wahldurchfuehrungsgebiet.class);
    }

    return null;
  }

  public Optional<Ergebniseingabestatus> getErgebniseingabestatusExported() {
    return ergebniseingabestatusExported;
  }
}
