package de.ivu.elect.presentation;

import java.io.Serializable;

import javax.inject.Inject;

import de.ivu.elect.business.gebietsbaum.boundary.GebietSessionSelect;
import de.ivu.elect.business.gebietsbaum.boundary.GebietsartConversationSelect;
import de.ivu.elect.business.gebietsbaum.entity.Gebiet;
import de.ivu.elect.business.wahl.boundary.WahlSessionSelector;
import de.ivu.elect.business.wahl.boundary.WahlterminSessionSelect;
import de.ivu.elect.business.wahl.entity.Wahl;
import de.ivu.elect.business.wahl.entity.Wahltermin;

public class GebietCreateViewInit implements Serializable {

  private static final long serialVersionUID = 1L;

  @Inject
  private transient WahlSessionSelector wahlSessionSelector;

  @Inject
  private transient GebietSessionSelect gebietSessionSelect;

  @Inject
  private transient WahlterminSessionSelect wahlterminSessionSelect;

  @Inject
  private transient GebietsartConversationSelect gebietsartConversationSelect;

  public void init(Gebiet gebiet) {
    gebiet.setWahl(getSelectedWahl());
    gebiet.setWahltermin(getSelectedWahltermin());
    gebiet.setUebergeordnetesGebiet(gebietSessionSelect.getEntity());

    long position = 1L;

    if (gebietSessionSelect.getEntity() != null) {
      for (Gebiet gebietUntergeordnet : gebietSessionSelect.getEntity().getUntergeordneteGebiete()) {
        if (gebietUntergeordnet.getPosition() >= position) {
          position = gebietUntergeordnet.getPosition() + 1;
        }
      }
    }

    gebiet.setPosition(position);

    if (gebietsartConversationSelect.isSelected()) {
      gebiet.setGebietsart(gebietsartConversationSelect.getEntity());
    }
  }

  protected Wahl getSelectedWahl() {
    return wahlSessionSelector.getEntity();
  }

  protected Wahltermin getSelectedWahltermin() {
    return wahlterminSessionSelect.getEntity();
  }

  public void preSaveGebiet(Gebiet entity) {
    // nichts zu tun
  }
}
