
package de.ivu.elect.presentation.stimmeingabe;

import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;

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

import org.apache.deltaspike.core.api.scope.ConversationGroup;
import org.apache.deltaspike.core.api.scope.ViewAccessScoped;

import de.ivu.elect.business.gebietsbaum.boundary.GebietSelectChangeEvent;
import de.ivu.elect.presentation.stimmeingabe.status.GebietErfassungsstatusInErgebniseingabestufe;

/**
 * Verwaltet für jeden GebietErfassungsstatus die Eigenschaft, ob im ErgebniseingangStatusView das entsprechende Panel mit des Gebieten dieses Status auf- oder zugeklappt (collapsed) ist.
 */
@ViewAccessScoped
public class ErgebniseingangStatusViewCollapseState implements Serializable {

  private static final long serialVersionUID = 1L;

  @Inject
  @ConversationGroup(EingangsStatusViewGebietAnzeigeStore.class)
  private transient EingangsStatusViewGebietAnzeigeStore eingangsStatusViewGebietAnzeigeStore;

  private Map<GebietErfassungsstatusInErgebniseingabestufe, CollapsedProperty> collapsedStateMap = new HashMap<>();

  public ErgebniseingangStatusViewCollapseState() {
    super();

    this.collapsedStateMap = new HashMap<>();
  }

  public CollapsedProperty getCollapsedPropertyForGebietErfassungsstatus(GebietErfassungsstatusInErgebniseingabestufe gebietErfassungsstatus, boolean defaultState) {
    if (gebietErfassungsstatus == null) {
      return CollapsedProperty.NULL;
    }

    if (!collapsedStateMap.containsKey(gebietErfassungsstatus)) {
      collapsedStateMap.put(gebietErfassungsstatus, new CollapsedProperty(defaultState));
    }

    return collapsedStateMap.get(gebietErfassungsstatus);
  }

  public EingangsStatusViewGebietAnzeige getEingangsStatusViewGebietAnzeige() {
    return eingangsStatusViewGebietAnzeigeStore.getEingangsStatusViewGebietAnzeige();
  }

  public void setEingangsStatusViewGebietAnzeige(EingangsStatusViewGebietAnzeige eingangsStatusViewGebietAnzeige) {
    eingangsStatusViewGebietAnzeigeStore.setEingangsStatusViewGebietAnzeige(eingangsStatusViewGebietAnzeige);
  }

  public boolean isButtonZurAuswahlEingangsStatusAnzeigen() {
    return eingangsStatusViewGebietAnzeigeStore.isButtonZurAuswahlEingangsStatusAnzeigen();
  }

  public void onGebietSelectChangeEvent(@Observes(notifyObserver = Reception.IF_EXISTS) GebietSelectChangeEvent event) {
    reset();
  }

  public void reset() {
    collapsedStateMap = new HashMap<>();
  }
}
