package de.ivu.elect.presentation.wahlvorschlagsperson;

import de.ivu.elect.business.gruppe.boundary.PolitischeGruppeExtendedDAO;
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.jee.presentation.search.AbstractSearchParameters;
import de.ivu.elect.presentation.wahlvorschlag.NlListeAuswahlHelper;
import de.ivu.elect.presentation.wahlvorschlag.NlListeStelInformationChangeEvent;

import org.apache.commons.lang3.StringUtils;

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

@Specializes
public class NlWahlvorschlagsPersonSearchView extends WahlvorschlagsPersonSearchView {

    private static final long serialVersionUID = 1L;

    @Inject
    private transient PolitischeGruppeExtendedDAO politischeGruppeDao;

    @Inject
    protected transient NlListeAuswahlHelper nlListeAuswahlHelper;

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

        return result;
    }

    @Override
    public boolean isPageMenuDisabled() {//ELECT-11239
        return true;
    }

    @Override
    public void addProperties(FormBuilder formBuilder) {//ELECT-10564
        String wildcardTooltip = getMessage(AbstractSearchParameters.WILDCARD_TOOLTIP_MSG_KEY);

        if (!isWahlvorschlagSelected()) {
            formBuilder.addProperty(searchParameters.getPolitischeGruppeProperty(politischeGruppeDao.findByWahlOrderByKurzname(getWahl())));
            formBuilder.addProperty(searchParameters.getFamiliennameProperty()).withTooltip(wildcardTooltip);
            formBuilder.addProperty(searchParameters.getVornameProperty()).withTooltip(wildcardTooltip);
        }


        nlListeAuswahlHelper.addListenAuswahlProperties(formBuilder);
    }

    @Override
    public boolean isSearchParametersRendered() {
        return true;
    }

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

    @Override
    public String getPageHeader() {
        return getMessage("nl.wahlvorschlagsperson.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
    }
}
