
package de.ivu.elect.dokumente.ergebnistabelle.gruppen;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import de.ivu.elect.dokumente.ergebnistabelle.AbstractErgebnistabelleCsvDTO;
import de.ivu.elect.dokumente.ergebnistabelle.EinfacheStimmenCsvDTO;
import de.ivu.jsefa.CsvAttachedList;

public class GruppenErgebnistabelleCsvDTO extends AbstractErgebnistabelleCsvDTO {

  // TODO: Gehört nicht ins CSV-DTO
  private Map<GruppenErgebnistabelleSpaltenSchluessel, Long> stimmenPerSpalte;

  private Long anzahlWahlberechtigteGesamt;

  private Long anzahlWaehlerGesamt;

  @CsvAttachedList(clazz = EinfacheStimmenCsvDTO.class)
  private List<EinfacheStimmenCsvDTO> gruppenStimmen;

  public GruppenErgebnistabelleCsvDTO(GruppenErgebnistabelleZeilenSchluessel schluessel) {
    super(schluessel);

    this.gruppenStimmen = new ArrayList<>();

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

  @Override
  public Class< ? > getSubDTOClass() {
    return EinfacheStimmenCsvDTO.class;
  }

  @Override
  public int getAnzahlSubDTO() {
    if (gruppenStimmen == null) {
      return 0;
    }

    return gruppenStimmen.size();
  }

  public List<EinfacheStimmenCsvDTO> getGruppenStimmen() {
    return gruppenStimmen;
  }

  public long getGruppenStimmenAusSpalte(GruppenErgebnistabelleSpaltenSchluessel spalte) {
    return stimmenPerSpalte.get(spalte);
  }

  public void clearGruppenStimmen() {
    gruppenStimmen.clear();
  }

  public void addGruppenStimmen(GruppenErgebnistabelleSpaltenSchluessel spalte, long anzahlStimmen) {
    addGruppenStimmen(EinfacheStimmenCsvDTO.create(anzahlStimmen));
    stimmenPerSpalte.put(spalte, anzahlStimmen);
  }

  public void addGruppenStimmen(EinfacheStimmenCsvDTO anzahlStimmen) {
    gruppenStimmen.add(anzahlStimmen);
  }

  public Long getAnzahlWahlberechtigteGesamt() {
    return anzahlWahlberechtigteGesamt;
  }

  public void setAnzahlWahlberechtigteGesamt(Long anzahlWahlberechtigteGesamt) {
    this.anzahlWahlberechtigteGesamt = anzahlWahlberechtigteGesamt;
  }

  public Long getAnzahlWaehlerGesamt() {
    return anzahlWaehlerGesamt;
  }

  public void setAnzahlWaehlerGesamt(Long anzahlWaehlerGesamt) {
    this.anzahlWaehlerGesamt = anzahlWaehlerGesamt;
  }
}
