
package de.ivu.elect.presentation.gebietsbaum;

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

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.business.gebietsbaum.entity.NlGebietCustomData;
import de.ivu.elect.jee.presentation.dynamicform.FormBuilder;
import de.ivu.elect.jee.presentation.dynamicform.ReadOnlyBooleanProperty;
import de.ivu.elect.nl.x509.NlX509Metadata;
import de.ivu.elect.presentation.security.NlPrivatePublicKeyNeeded;
import de.ivu.elect.presentation.security.NlPublicKeyEditView;

@Specializes
public class NlWasGebietEditView extends WasGebietEditView {

  private static final long serialVersionUID = 1L;

  @Inject
  private transient NlGebietEditReadOnly nlGebietEditReadOnly;

  @Inject
  private transient NlPrivatePublicKeyNeeded nlPrivatePublicKeyNeeded;

  public NlWasGebietEditView() {
    super();
  }

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

    if (isBriefwahlbezirkEdited()) {
      if (isBriefwahlbezirkAuslandEdited()) {
        return getMessage("briefwahlbezirk.ausland.edit.page.title");
      }

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

    return super.getPageTitle();
  }

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

    if (isBriefwahlbezirkEdited()) {
      if (isBriefwahlbezirkAuslandEdited()) {
        return getMessage("briefwahlbezirk.ausland.edit.page.header");
      }

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

    return super.getPageHeader();
  }

  @Override
  public void addProperties(FormBuilder formBuilder, Gebiet gebiet) {
    gebietViewFormBuilder.addGebietProperties(formBuilder, gebiet);

    if (nlGebietEditReadOnly.isReadOnly(gebiet)) {
      formBuilder.globalReadonly();
    }

    if (gebiet.isErfassungsgebiet() && nlPrivatePublicKeyNeeded.isPublicKeyNeeded(gebiet.getMandant())) {
      NlGebietCustomData customData = gebiet.getCustomData(NlGebietCustomData.class);

      NlX509Metadata nlX509Metadata = customData.getNlX509Metadata();

      if (nlX509Metadata == null || !customData.isPublicKeyValid()) {
        formBuilder.addProperty(new ReadOnlyBooleanProperty(getMessage("entity.einzahl.GEBIETSBAUM.PUBLIC_KEY"), false)); // ELECTVAPP-860
      } else {
        NlPublicKeyEditView.addPublicKeyInfo(formBuilder, nlX509Metadata, messages, userLocale);
      }
    }
  }

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

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

    return false;
  }

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

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

    return false;
  }

  private boolean isBriefwahlbezirkAuslandEdited() {
    return getEntity() != null && new NlGebiet(getEntity()).isBriefwahlgebietAusland();
  }
}
