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

import de.ivu.elect.business.CurrentCustomer;
import de.ivu.elect.business.security.UseCasePermission;
import de.ivu.elect.business.wahl.boundary.WahlSessionSelect;
import de.ivu.elect.business.wahl.entity.NlWahlCustomData;
import de.ivu.elect.business.wahl.entity.NlWahlPhase;
import de.ivu.elect.business.wahl.entity.NlWahlart;
import de.ivu.elect.business.wahl.entity.Wahl;
import de.ivu.elect.presentation.ergebnis.NlWasErgebnisUebersichtSearchView;
import de.ivu.elect.presentation.menu.AbstractMenuItemEntry;
import de.ivu.elect.presentation.security.AbstractGebietSecurity;

import javax.inject.Inject;

public class NLWasErgebnisUebersichtMenuItemEntry extends AbstractMenuItemEntry {

    private static final long serialVersionUID = 1L;
    @Inject
    private transient WahlSessionSelect wahlSelect;

    public NLWasErgebnisUebersichtMenuItemEntry() {
        super();
    }

    @Override
    protected boolean isDisabledInternal() {
        return !isGebietSelected();
    }

    @Override
    protected AbstractGebietSecurity getGebietSecurity() {
        return getEinsehenGebietSecurity();
    }


    @Inject
    private transient CurrentCustomer currentCustomer;


    protected Wahl getSelectedWahl() {
        return wahlSelect.getEntity();
    }

    @Override
    public boolean isRendered() {
        NlWahlPhase nlWahlPhase = bestimmeWahlPhase(getSelectedWahl());
        return hasUseCasePermission(UseCasePermission.ERGEBNIS_STATUSUEBERSICHT_ANZEIGEN) && isWahlSelected()
                && isCsb() && (nlWahlPhase.isFreigabe() || nlWahlPhase.isSitzberechnung());//ELECTVAPP-741
    }

    private boolean isWahlSelected() {
        return wahlSelect.isSelected();
    }

    @Override
    public String getTargetViewId() {
        return NlWasErgebnisUebersichtSearchView.VIEW_ID;
    }

    @Override
    public String getLabelKey() {
        return "ergebnis.uebersicht.search.menu.item.label";
    }

    private boolean isCsb() {
        Wahl selectedWahl = getSelectedWahl();
        if (selectedWahl == null) {
            return false;
        }
        return NlWahlart.isWasCSB(selectedWahl, currentCustomer.getCustomer());
    }


    @Override
    public String getIcon() {
        return getIcons().getIconSearch();
    }

    private NlWahlPhase bestimmeWahlPhase(Wahl wahl) {
        try {
            return wahl.getCustomData(NlWahlCustomData.class).getNlWahlPhase();
        } catch (Exception e) {
            // Für Systeme/Mandanten ohne NlWahlCustomData
            return NlWahlPhase.NICHT_GESETZT;
        }
    }
}
