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

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

import java.util.ArrayList;
import java.util.List;

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

import de.ivu.elect.business.WusFeaturesAktiviert;
import de.ivu.elect.business.ergebnis.entity.Ergebnisart;
import de.ivu.elect.business.stimmeingabe.boundary.ErgebniseingangKonfiguration;
import de.ivu.elect.business.wahl.entity.Wahl;
import de.ivu.elect.business.wahl.entity.Wahldurchfuehrung;

@Specializes
public class WasWahlPostCreate extends CoreWahlPostCreate {

  @Inject
  private transient ErgebniseingangKonfiguration ergebniseingangKonfiguration;

  @Inject
  private transient WusFeaturesAktiviert wusFeaturesAktiviert;

  public WasWahlPostCreate() {
    super();
  }

  @Override
  public void postCreate(Wahl wahl) {
    if (isCreateSystemgruppen()) {
      createSystemGruppen(wahl);
    }

    super.postCreate(wahl);

    if (wahl != null && wahl.isInstanceOf(Wahldurchfuehrung.class)) {
      Wahldurchfuehrung wahldurchfuehrung = castTo(wahl, Wahldurchfuehrung.class);
      wahldurchfuehrung.setErgebniseingangsart(ergebniseingangKonfiguration.getErgebniseingangsartInitial(wahldurchfuehrung));
    }
  }

  protected boolean isCreateSystemgruppen() {
    return wusFeaturesAktiviert.isWusOderWusWasZusammen();
  }

  @Override
  protected List<Ergebnisart> getAnzulegendeErgebnisArten() {
    if (wusFeaturesAktiviert.isWusOderWusWasZusammen()) {
      List<Ergebnisart> result = new ArrayList<>(getAnzulegendeErgebnisArtenWas());

      for (Ergebnisart ergebnisart : getAnzulegendeErgebnisArtenWus()) {
        if (!result.contains(ergebnisart)) {
          result.add(ergebnisart);
        }
      }

      return result;
    }

    return getAnzulegendeErgebnisArtenWas();
  }
}
