
package de.ivu.elect.presentation.system;

import javax.annotation.Nullable;
import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
import javax.inject.Named;

import de.ivu.elect.business.konfiguration.control.SystemGebietsebeneAuswahl;
import de.ivu.elect.business.mandant.boundary.MandantEdit;
import de.ivu.elect.business.mandant.entity.Mandant;
import de.ivu.elect.business.security.UseCasePermission;
import de.ivu.elect.jee.faces.PreConditionCheck;
import de.ivu.elect.jee.presentation.dynamicform.FormBuilder;
import de.ivu.elect.presentation.AbstractElectEditView;
import de.ivu.elect.presentation.View;
import de.ivu.elect.presentation.mandant.form.MandantViewFormBuilder;

@RequestScoped
@Named(SystemGebietsebeneEditView.COMPONENT_NAME)
@View(viewId = SystemGebietsebeneEditView.VIEW_ID, useCase = UseCasePermission.KONFIGURATION_EDIT)
public class SystemGebietsebeneEditView extends AbstractElectEditView<Mandant> {

  private static final long serialVersionUID = 1L;

  public static final String COMPONENT_NAME = "systemGebietsebeneEditView";

  public static final String VIEW_ID = "/system/system-gebietsebene-edit.xhtml";

  @Inject
  private transient SystemGebietsebeneAuswahl systemGebietsebeneAuswahl;

  @Inject
  private transient MandantEdit mandantEdit;

  public SystemGebietsebeneEditView() {
    super();
  }

  @Nullable
  @PreConditionCheck
  public String checkCondition() {
    if (getPrincipal().isLoggedIn() && getPrincipal().getMandant() != null && getPrincipal().getMandant().getArt().isCustomerMandant()) {
      if (!getMandant().getSystemGebietsebene().isGesetzt()) {
        addWarningMessage("system.ebene.festlegen.typ.unbekannt");
      }

      return null;
    }

    return getStartViewId();
  }

  @Override
  protected Mandant getEntity() {
    return getMandant();
  }

  @Override
  protected void addProperties(FormBuilder formBuilder, Mandant entity) {
    MandantViewFormBuilder.addSystemGebietsebeneProperties(formBuilder, entity, systemGebietsebeneAuswahl);
  }

  @Override
  public String delete() {
    throw new UnsupportedOperationException();
  }

  @Override
  protected boolean isGebietBearbeitenRechtPruefen() {
    return false;
  }

  @Override
  protected boolean isSavePermissionVorhanden() {
    return hasPermission(UseCasePermission.KONFIGURATION_EDIT);
  }

  @Override
  public String save() {
    mandantEdit.save(getEntity());

    addInfoMessage("system.gebietsebene.gespeichert");

    return getStartViewId();
  }

  @Override
  public boolean isBtnCancelRendered() {
    Mandant mandant = getMandant();

    return mandant != null && mandant.getSystemGebietsebene().isGesetzt();
  }

  @Override
  @RequestScoped
  public String cancel() {
    return getStartViewId();
  }
}
