package de.ivu.elect.presentation.gebietsbaum.tree;

import java.io.Serializable;
import java.util.Collections;
import java.util.EnumMap;
import java.util.Map;

import de.ivu.elect.business.stimmeingabe.entity.Ergebniseingangsfehlerstatus;

public class WasGebietsbaumErfassungStatus implements Serializable {

  private static final long serialVersionUID = 1L;

  private final Map<Ergebniseingangsfehlerstatus, Long> ergebniseingangsfehlerstatusAnzahl;

  private final long anzahlErfassungsgebieteUnterhalbInsgesamt;

  private final WasGebietsbaumAusbleibend ausbleibend;

  public WasGebietsbaumErfassungStatus(Ergebniseingangsfehlerstatus ergebniseingangsfehlerstatus, WasGebietsbaumAusbleibend ausbleibend) {
    this(createMap(ergebniseingangsfehlerstatus), 0L, ausbleibend);
  }

  private static Map<Ergebniseingangsfehlerstatus, Long> createMap(Ergebniseingangsfehlerstatus ergebniseingangsfehlerstatus) {
    if (ergebniseingangsfehlerstatus == null) {
      return Collections.emptyMap();
    }
    Map<Ergebniseingangsfehlerstatus, Long> result = new EnumMap<>(Ergebniseingangsfehlerstatus.class);
    result.put(ergebniseingangsfehlerstatus, 1L);
    return result;
  }

  public WasGebietsbaumAusbleibend getAusbleibend() {
    return ausbleibend;
  }

  private WasGebietsbaumErfassungStatus(Map<Ergebniseingangsfehlerstatus, Long> ergebniseingangsfehlerstatusAnzahl,
                                        long anzahlErfassungsgebieteUnterhalbInsgesamt, WasGebietsbaumAusbleibend ausbleibend) {
    this.ergebniseingangsfehlerstatusAnzahl = ergebniseingangsfehlerstatusAnzahl;
    this.anzahlErfassungsgebieteUnterhalbInsgesamt = anzahlErfassungsgebieteUnterhalbInsgesamt;
    this.ausbleibend = ausbleibend;
  }

  public WasGebietsbaumErfassungStatus(Map<Ergebniseingangsfehlerstatus, Long> ergebniseingangsfehlerstatusAnzahl, long anzahlErfassungsgebieteUnterhalbInsgesamt) {
    this(ergebniseingangsfehlerstatusAnzahl, anzahlErfassungsgebieteUnterhalbInsgesamt, WasGebietsbaumAusbleibend.KEIN);
  }

  public Map<Ergebniseingangsfehlerstatus, Long> getErgebniseingangsfehlerstatusAnzahl() {
    return ergebniseingangsfehlerstatusAnzahl;
  }

  public long getAnzahlErfassungsgebieteUnterhalbInsgesamt() {
    return anzahlErfassungsgebieteUnterhalbInsgesamt;
  }

  @Override
  public String toString() {
    return "WasGebietsbaumErfassungStatus{" +
        "ergebniseingangsfehlerstatusAnzahl=" + ergebniseingangsfehlerstatusAnzahl +
        ", anzahlErfassungsgebieteUnterhalbInsgesamt=" + anzahlErfassungsgebieteUnterhalbInsgesamt +
        '}';
  }
}
