
package de.ivu.elect.presentation.kandidatur;

import java.util.ArrayList;
import java.util.List;

import javax.enterprise.event.Observes;
import javax.enterprise.event.Reception;
import javax.enterprise.event.TransactionPhase;
import javax.enterprise.inject.Specializes;
import javax.inject.Inject;

import org.apache.commons.lang3.StringUtils;

import de.ivu.elect.business.kandidatur.entity.Kandidatur;
import de.ivu.elect.jee.faces.PreConditionCheck;
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.kandidatur.action.NlListenkandidaturZulassungAblehnenMitBemerkungAction;
import de.ivu.elect.presentation.wahlvorschlag.NlListeAuswahlHelper;
import de.ivu.elect.presentation.wahlvorschlag.NlListeStelInformationChangeEvent;

@Specializes
@OnlineHilfeId("261")
public class NlListenkandidaturSearchView extends ListenkandidaturSearchView {

  private static final long serialVersionUID = 1L;

  @Inject
  private transient NlListeAuswahlHelper nlListeAuswahlHelper;

  public NlListenkandidaturSearchView() {
    super();
  }

  @Override
  public void presetSearchParameters() {
    // Keine Filtereinstellungen (ELECT-10003)
  }

  @Override
  @PreConditionCheck
  public String checkCondition() {
    String result = super.checkCondition();
    if (StringUtils.isBlank(result)) {
      return nlListeAuswahlHelper.adjustGebiet();
    }

    return result;
  }

  @Override
  public void addProperties(FormBuilder formBuilder) {
    // Keine Filtereinstellungen (ELECT-10003)
    nlListeAuswahlHelper.addListenAuswahlProperties(formBuilder);
  }

  @Override
  public List<Kandidatur> getSearchResultIncludingErsatzkandidaturen() {
    return new ArrayList<>(getSearchResult());
  }

  @Override
  public List<String> getDialogTemplates() {
    List<String> result = new ArrayList<>(super.getDialogTemplates());

    result.add(NlListenkandidaturZulassungAblehnenMitBemerkungAction.DIALOG_TEMPLATE_PATH); // ELECT-10224

    return result;
  }

  @Override
  @Redirect
  public String search() {
    if (nlListeAuswahlHelper.aktualisiere()) {
      reset();
    }
    return super.search();
  }

  @Override
  public String getPageHeader() {
    return getMessage("nl.listenkandidatur.search.header", nlListeAuswahlHelper.getPageHeader());
  }

  @Override
  public boolean isSearchPartialUpdateSupported() {
    return false; // Gebietswechsel bei Suche
  }

  public void listen(@Observes(during = TransactionPhase.AFTER_SUCCESS, notifyObserver = Reception.IF_EXISTS) NlListeStelInformationChangeEvent event) {
    resetSearchParametersModel(); // ELECT-11493
  }
}
