package de.ivu.elect.business.stimmeingabe.entity;

import de.ivu.elect.business.gebietsbaum.entity.Gebiet;

import java.io.Serializable;
import java.util.EnumMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

/*
 * Hack, Pattern nicht weiter nutzen
 */
public class StimmeingabeImportContainer implements Serializable {

  private static final long serialVersionUID = 1L;

  private final Map<Ergebniseingangsart, Set<Gebiet>> gebieteZuruecksetzen;

  private final Set<Gebiet> gebieteErfasstIn = new HashSet<>();

  private final Set<Gebiet> gebieteErfassungsstatus = new HashSet<>();

  public StimmeingabeImportContainer() {
    gebieteZuruecksetzen = new EnumMap<>(Ergebniseingangsart.class);
    for (var value : Ergebniseingangsart.values()) {
      gebieteZuruecksetzen.put(value, new HashSet<>());
    }

  }

  public Map<Ergebniseingangsart, Set<Gebiet>> getGebieteZuruecksetzen() {
    return gebieteZuruecksetzen;
  }

  public Set<Gebiet> getGebieteErfasstIn() {
    return gebieteErfasstIn;
  }

  public Set<Gebiet> getGebieteErfassungsstatus() {
    return gebieteErfassungsstatus;
  }

  public boolean isEmpty() {
    return gebieteErfasstIn.isEmpty() && gebieteErfassungsstatus.isEmpty() && isGebieteZuruecksetzenEmpty();
  }

  private boolean isGebieteZuruecksetzenEmpty() {
    return gebieteZuruecksetzen.values().stream().allMatch(Set::isEmpty);
  }
}
