
package de.ivu.elect.presentation.ergebnis.exchange;

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

import de.ivu.elect.business.ergebnis.control.ErgebnisExportContext;
import de.ivu.elect.business.gebietsbaum.entity.Gebiet;
import de.ivu.elect.business.system.boundary.NlSpecialBackgroundServiceRunning;
import de.ivu.elect.jee.presentation.dynamicform.FormBuilder;

@Specializes
public class NlErgebnisExportView extends ErgebnisExportView {

  private static final long serialVersionUID = 1L;

  @Inject
  private transient NlSpecialBackgroundServiceRunning nlSpecialBackgroundServiceRunning;

  /**
   * Falls true, dann wurde der Export manuell über den Export-View (ergebnis-export.xhtml) angestoßen...
   */
  public static final String NL_ERGEBNIS_EXPORT_CONTEXT_PARAM_IS_DIRECT_EXPORT = "NlErgebnisExportView#NL_EXPORT_CONTEXT_PARAM_IS_DIRECT_EXPORT";

  public static final String NL_ERGEBNIS_EXPORT_CONTEXT_PARAM_SELECTED_GEBIET_PK = "EML510GebietPK";

  public NlErgebnisExportView() {
    super();
  }

  @Override
  public void preRenderView() {
    super.preRenderView();

    if (ergebnisberechnungLaeuft()) {
      messages.addWarnMessage("nl.hintergrundprozess.laeuft.noch.warnung");
    }
  }

  @Override
  protected void addProperties(FormBuilder formBuilder) {
    super.addProperties(formBuilder);

    if (isBtnExportierenDisabled()) {
      formBuilder.globalReadonly();
    }
  }

  @Override
  public boolean isBtnExportierenDisabled() {
    return super.isBtnExportierenDisabled() || ergebnisberechnungLaeuft();
  }

  @Override
  protected ErgebnisExportContext getContext() {
    ErgebnisExportContext context = super.getContext();

    context.put(NL_ERGEBNIS_EXPORT_CONTEXT_PARAM_IS_DIRECT_EXPORT, Boolean.TRUE); // ELECTVAPP-1411

    Gebiet selectedGebiet = getSelectedGebiet();

    if (selectedGebiet == null) {
      context.put(NL_ERGEBNIS_EXPORT_CONTEXT_PARAM_SELECTED_GEBIET_PK, null);
    } else {
      context.put(NL_ERGEBNIS_EXPORT_CONTEXT_PARAM_SELECTED_GEBIET_PK, selectedGebiet.getPk());
    }

    return context;
  }

  private boolean ergebnisberechnungLaeuft() {
    return nlSpecialBackgroundServiceRunning.isSomethingRunning();
  }
}
