
package de.ivu.elect.presentation.benutzerverwaltung;

import java.util.List;

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

import de.ivu.elect.business.benutzerverwaltung.boundary.PermissionService;
import de.ivu.elect.business.benutzerverwaltung.boundary.RechteTestmodusEdit;
import de.ivu.elect.business.benutzerverwaltung.entity.RechteKonfigurationConstants;
import de.ivu.elect.business.security.UseCasePermission;
import de.ivu.elect.jee.entity.AbstractNoPersistentEntity;
import de.ivu.elect.jee.entity.tk.EntityUK;
import de.ivu.elect.jee.presentation.dynamicform.FormBuilder;
import de.ivu.elect.jee.presentation.redirect.Redirect;
import de.ivu.elect.presentation.AbstractElectEditView;
import de.ivu.elect.presentation.View;
import de.ivu.elect.presentation.benutzerverwaltung.form.RechteTestmodusPickListProperty;
import de.ivu.elect.presentation.hilfe.OnlineHilfeId;

/**
 *  on 05.06.2015.
 */
@OnlineHilfeId("491")
@RequestScoped
@Named(RechteTestmodusEditView.COMPONENT_NAME)
@View(viewId = RechteTestmodusEditView.VIEW_ID, useCase = UseCasePermission.RECHTE_FUER_TESTMODUS_EDIT)
public class RechteTestmodusEditView extends AbstractElectEditView<AbstractNoPersistentEntity<Object, EntityUK>> {

  private static final long serialVersionUID = 1L;

  public static final String COMPONENT_NAME = "rechteTestmodusEditView";

  public static final String VIEW_ID = "/benutzerverwaltung/rechte-testmodus-edit.xhtml";

  @Inject
  private transient RechteTestmodusEdit rechteTestmodusEdit;

  @Inject
  private transient PermissionService permissionService;

  private transient RechteTestmodusPickListProperty rechteTestmodusProperty;

  public RechteTestmodusEditView() {
    super();
  }

  @Override
  protected AbstractNoPersistentEntity<Object, EntityUK> getEntity() {
    return new AbstractNoPersistentEntity<>();
  }

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

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

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

  @Override
  @Redirect
  public String save() {
    rechteTestmodusEdit.saveRechteFuerTestmodus(getMandant(), rechteTestmodusProperty.getZugeordneteElemente());

    addMessageSaveSuccess();

    return VIEW_ID;
  }

  protected void addMessageSaveSuccess() {
    addInfoMessage("entity.edit.action.save.success.message", getMessage(RechteKonfigurationConstants.MESSAGE_KEY_ENTITY_EINZAHL));
  }

  @Override
  public boolean isBtnCancelRendered() {
    return false;
  }

  @Override
  @Redirect
  @Nullable
  public String cancel() {
    return null;
  }

  @Override
  protected void addProperties(FormBuilder formBuilder, AbstractNoPersistentEntity<Object, EntityUK> ignored) {
    List<UseCasePermission> verfuegbareRechte = permissionService.getAvailablePermissionsForCurrentCustomer(getMandant().getArt());
    List<UseCasePermission> testRechte = rechteTestmodusEdit.getRechteFuerTestmodus(getMandant());

    rechteTestmodusProperty = new RechteTestmodusPickListProperty(verfuegbareRechte, testRechte, getMessages());

    formBuilder.addProperty(rechteTestmodusProperty);
  }

  @Override
  protected void resetModel() {
    rechteTestmodusProperty = null;
  }
}
