
package de.ivu.elect.presentation.wahlvorschlag;

import java.util.Date;

import javax.annotation.PostConstruct;
import javax.inject.Inject;
import javax.inject.Named;

import de.ivu.elect.business.gruppeimgebiet.boundary.GruppeImGebietConversationSelect;
import de.ivu.elect.business.gruppeimgebiet.entity.GruppeImGebiet;
import de.ivu.elect.business.wahlvorschlag.entity.ReferendumOption;
import de.ivu.elect.business.wahlvorschlag.entity.WahlvorschlagStatus;
import de.ivu.elect.jee.faces.PreConditionCheck;
import de.ivu.elect.jee.presentation.dynamicform.FormBuilder;
import de.ivu.elect.presentation.gruppeimgebiet.ReferendumVorlageImGebietEditView;
import de.ivu.elect.presentation.hilfe.OnlineHilfeId;
import de.ivu.elect.presentation.wahlvorschlag.form.ReferendumOptionViewFormBuilder;

@OnlineHilfeId(value = "783", mehrfachVergebenOk = true)
@Named(AbstractReferendumOptionCreateNoScopeView.COMPONENT_NAME)
public class ReferendumOptionCreateView extends AbstractReferendumOptionCreateView {

  private static final long serialVersionUID = 1L;

  private static final String PARENT_VIEW_ID = ReferendumVorlageImGebietEditView.VIEW_ID;

  @Inject
  private GruppeImGebietConversationSelect referendumVorlageImGebietSelect;

  @Inject
  private ReferendumOptionViewFormBuilder referendumOptionViewFormBuilder;

  public ReferendumOptionCreateView() {
    super();
  }

  @PreConditionCheck
  public String checkPreCondition() {
    if (isReferendumVorlageImGebietForGebietSelected()) {
      return null;
    }

    return cancel();
  }

  private boolean isReferendumVorlageImGebietForGebietSelected() {
    return isReferendumVorlageImGebietSelected() && isGebietSelected() && getSelectedGebiet().equals(getEntity().getGebiet());
  }

  private boolean isReferendumVorlageImGebietSelected() {
    return referendumVorlageImGebietSelect.isSelected();
  }

  private GruppeImGebiet getReferendumVorlageImGebiet() {
    return referendumVorlageImGebietSelect.getEntity();
  }

  public String getReferendumVorlageName() {
    return getReferendumVorlageImGebiet().getKurznameAufGebiet();
  }

  public String getGebietName() {
    return getSelectedGebietNameFormatted();
  }

  @Override
  protected String getParentViewId() {
    return PARENT_VIEW_ID;
  }

  @Override
  @PostConstruct
  public void init() {
    super.init();

    initReferendumOption();
  }

  private void initReferendumOption() {
    ReferendumOption referendumOption = getEntity();

    referendumOption.setGruppeImGebiet(getReferendumVorlageImGebiet());
    referendumOption.setWahlvorschlagStatus(WahlvorschlagStatus.ZUGELASSEN);
    referendumOption.setZeitpunktDerEinreichung(new Date());
  }

  @Override
  public void addProperties(FormBuilder formBuilder, ReferendumOption referendumOption) {
    referendumOptionViewFormBuilder.addProperties(formBuilder, referendumOption);
  }
}
