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

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

import de.ivu.elect.business.stimmeingabe.control.ErgebniseingangEndstufeAusVorstufeCreate;
import de.ivu.elect.business.stimmeingabe.control.NlStimmeingabeCreate;
import de.ivu.elect.business.stimmeingabe.control.StimmeingabePlausiBuilder;
import de.ivu.elect.business.stimmeingabe.entity.Ergebniseingang;
import de.ivu.elect.business.stimmeingabe.entity.ErgebniseingangErfasser;

@Specializes
@Stateless
public class NlWasStimmeingabeBoundaryCreate extends WasStimmeingabeBoundaryCreate {

  @Inject
  protected transient ErgebniseingangDAO ergebniseingangDAO;

  @Inject
  protected transient ErgebniseingangEndstufeAusVorstufeCreate ergebniseingangEndstufeAusVorstufeCreate;

  public NlWasStimmeingabeBoundaryCreate() {
    super();
  }

  public void uebernimmErgebniseingangAusVorstufeInEndstufeOhneVergleichPlausibilisierung(ErgebniseingangErfasser erfasser, Ergebniseingang ergebniseingang,
      StimmeingabePlausiBuilder stimmeingabePlausiBuilder) {
    Ergebniseingang ergebniseingangVorstufe = attachErgebniseingangVorstufe(ergebniseingang);

    if (ergebniseingangVorstufe != null && create instanceof NlStimmeingabeCreate) {
      ((NlStimmeingabeCreate) create).createAndSaveErgebniseingangEndstufeManuell(erfasser, ergebniseingangVorstufe, stimmeingabePlausiBuilder);
    }
  }

  @Nullable
  private Ergebniseingang attachErgebniseingangVorstufe(Ergebniseingang ergebniseingang) {
    if (ergebniseingang == null || ergebniseingang.getErgebniseingabestufe().isInErgebnisUebernehmbar()) {
      return null; // Ergebniseingang fehlt oder ist keine Vorstufe
    }

    return ergebniseingangDAO.attach(ergebniseingang);
  }
}
