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

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 ReferendumErgebnistabelleCsvDTO extends AbstractErgebnistabelleCsvDTO {

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

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

  public ReferendumErgebnistabelleCsvDTO(ReferendumErgebnistabelleZeilenSchluessel 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> getReferendumStimmen() {
    return gruppenStimmen;
  }

  public long getReferendumStimmenAusSpalte(ReferendumErgebnistabelleSpaltenSchluessel spalte) {
    return stimmenPerSpalte.get(spalte);
  }

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

  public void addReferendumStimmen(ReferendumErgebnistabelleSpaltenSchluessel spalte, long anzahlStimmen) {
    addReferendumStimmen(EinfacheStimmenCsvDTO.create(anzahlStimmen));

    stimmenPerSpalte.put(spalte, anzahlStimmen);
  }

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