
package de.ivu.elect.presentation.stimmeingabe;

import javax.inject.Inject;
import javax.inject.Named;

import de.ivu.elect.business.stimmeingabe.entity.StimmeingabePlausiKonfigurationCustomData;
import org.apache.deltaspike.core.api.scope.ConversationGroup;

import de.ivu.elect.business.security.UseCasePermission;
import de.ivu.elect.business.security.UseCaseSecure;
import de.ivu.elect.business.stimmeingabe.boundary.StimmeingabePlausiKonfigurationTemplateConversationStore;
import de.ivu.elect.business.stimmeingabe.entity.StimmeingabePlausiKonfiguration;
import de.ivu.elect.jee.presentation.dynamicform.FormBuilder;
import de.ivu.elect.jee.presentation.redirect.Redirect;
import de.ivu.elect.presentation.hilfe.OnlineHilfeId;
import de.ivu.elect.presentation.stimmeingabe.form.StimmeingabePlausiKonfigurationViewFormBuilder;

@OnlineHilfeId("773")
@Named(AbstractStimmeingabePlausiKonfigurationEditView.COMPONENT_NAME)
public class StimmeingabePlausiKonfigurationEditView extends AbstractStimmeingabePlausiKonfigurationEditView {

  private static final long serialVersionUID = 1L;

  @Inject
  @ConversationGroup(StimmeingabePlausiKonfigurationTemplateConversationStore.class)
  private transient StimmeingabePlausiKonfigurationTemplateConversationStore stimmeingabePlausiKonfigurationTemplateConversationStore;

  @Inject
  private transient StimmeingabePlausiKonfigurationViewFormBuilder stimmeingabePlausiKonfigurationViewFormBuilder;

  public StimmeingabePlausiKonfigurationEditView() {
    super();
  }

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

  @Override
  protected void addProperties(FormBuilder formBuilder,
      StimmeingabePlausiKonfiguration stimmeingabePlausiKonfiguration) {
    stimmeingabePlausiKonfigurationViewFormBuilder.addProperties(formBuilder, stimmeingabePlausiKonfiguration);
  }

  @Override
  public StimmeingabePlausiKonfiguration getEntity() {
    StimmeingabePlausiKonfiguration entity = super.getEntity();
    if (entity == null) {
      return null;
    }
    StimmeingabePlausiKonfiguration template = stimmeingabePlausiKonfigurationTemplateConversationStore
        .getStimmeingabePlausiKonfiguration();
    if (template != null) {
      entity.setStimmeingabePlausiKonfigurationDefault(template.getStimmeingabePlausiKonfigurationDefault());
    }
    return entity;
  }

  @Override
  public void setEntity(StimmeingabePlausiKonfiguration entity) {
    if (entity == null) {
      stimmeingabePlausiKonfigurationTemplateConversationStore.setTemplate(null);
    } else {
      stimmeingabePlausiKonfigurationTemplateConversationStore.setTemplate(entity);
    }
    super.setEntity(entity);
  }

  @Override
  public boolean isEntitySet() {
    return super.isEntitySet() && stimmeingabePlausiKonfigurationTemplateConversationStore.isTemplateSelected();
  }

  @Redirect
  @UseCaseSecure(UseCasePermission.STIMMEINGABE_PLAUSI_DELETE)
  public String resetToDefault() {
    return resetToDefault(getEntity());
  }

  private String resetToDefault(StimmeingabePlausiKonfiguration entity) {
    StimmeingabePlausiKonfiguration defaultPlausiKonfiguration = entity
        .getStimmeingabePlausiKonfigurationDefault();
    entity.setBeschreibung(defaultPlausiKonfiguration.getBeschreibung());
    entity.setFehlerart(defaultPlausiKonfiguration.getFehlerart());
    entity.setFehlermeldungFormat(defaultPlausiKonfiguration.getFehlermeldungFormat());
    entity.setFehlerschluessel(defaultPlausiKonfiguration.getFehlerschluessel());
    entity.setStatus(defaultPlausiKonfiguration.getStatus());
    ((StimmeingabePlausiKonfigurationCustomData) entity.getCustomData()).resetToDefault((StimmeingabePlausiKonfigurationCustomData) defaultPlausiKonfiguration.getCustomData());
    edit.save(entity);

    addInfoMessage("stimmeingabe.plausi.konfiguration.action.reset.to.default.success.message",
        entityMeta.getEinzahlMessage());

    resetStateAfterAction();
    return getParentViewId(); // definierter Parent, benutze deleteAndGoBack um zum vorherigen View zurückzukehren
  }
}
