
package de.ivu.elect.presentation.gebietsbaum;

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

import org.apache.deltaspike.core.api.scope.ConversationGroup;

import de.ivu.elect.business.gebietsbaum.entity.Gebiet;
import de.ivu.elect.business.gebietsbaum.entity.Gebietsart;
import de.ivu.elect.business.gebietsbaum.entity.NlGebiet;
import de.ivu.elect.jee.presentation.redirect.Redirect;

@Specializes
public class NlGebietCreateView extends GebietCreateView {

  private static final long serialVersionUID = 1L;

  @Inject
  @ConversationGroup(NlGebietCreateViewConversationStore.class)
  private transient NlGebietCreateViewConversationStore nlGebietCreateViewConversationStore;

  public NlGebietCreateView() {
    super();
  }

  @Override // ELECTVAPP-721
  public String getPageTitle() {
    if (isStimmbezirkCreated()) {
      return getMessage("stimmbezirk.create.page.title");
    }

    if (isBriefwahlbezirkCreated()) {
      if (isBriefwahlbezirkAuslandCreated()) {
        return getMessage("briefwahlbezirk.ausland.create.page.title");
      }

      return getMessage("briefwahlbezirk.create.page.title");
    }

    return super.getPageTitle();
  }

  @Override // ELECTVAPP-721
  public String getPageHeader() {
    if (isStimmbezirkCreated()) {
      return getMessage("stimmbezirk.create.page.header");
    }

    if (isBriefwahlbezirkCreated()) {
      if (isBriefwahlbezirkAuslandCreated()) {
        return getMessage("briefwahlbezirk.ausland.create.page.header");
      }

      return getMessage("briefwahlbezirk.create.page.header");
    }

    return super.getPageHeader();
  }

  @Override
  protected void callSave(Gebiet gebiet) {
    if (gebiet != null && isBriefwahlbezirkCreated()) {
      if (isBriefwahlbezirkGemeindeCreated()) {
        new NlGebiet(gebiet).setBriefwahlgebietGemeinde();
      }

      if (isBriefwahlbezirkAuslandCreated()) {
        new NlGebiet(gebiet).setBriefwahlgebietAusland();
      }
    }

    super.callSave(gebiet);
  }

  @Override
  @Nullable
  @Redirect
  public String goBack() {
    nlGebietCreateViewConversationStore.close();

    return super.goBack();
  }

  private boolean isStimmbezirkCreated() {
    if (getEntity() != null) {
      Gebietsart gebietsart = getEntity().getGebietsart();

      return gebietsart != null && gebietsart.isStimmbezirk();
    }

    return false;
  }

  private boolean isBriefwahlbezirkCreated() {
    if (getEntity() != null) {
      Gebietsart gebietsart = getEntity().getGebietsart();

      return gebietsart != null && gebietsart.isBriefwahlbezirk();
    }

    return false;
  }

  private boolean isBriefwahlbezirkGemeindeCreated() {
    return nlGebietCreateViewConversationStore.isBriefwahlbezirkGemeindeCreated();
  }

  private boolean isBriefwahlbezirkAuslandCreated() {
    return nlGebietCreateViewConversationStore.isBriefwahlbezirkAuslandCreated();
  }
}
