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

import java.util.ArrayList;
import java.util.List;

import org.jsefa.csv.annotation.CsvDataType;
import org.jsefa.csv.annotation.CsvField;

import de.ivu.elect.business.gruppe.entity.Gruppe;
import de.ivu.elect.dokumente.ergebnistabelle.AbstractErgebnistabelleCsvDTO;
import de.ivu.elect.dokumente.ergebnistabelle.EinfacheStimmenCsvDTO;
import de.ivu.jsefa.CsvAttachedList;
import de.ivu.jsefa.CsvHeader;

@CsvDataType
public class ListenkandidaturenErgebnistabelleCsvDTO extends AbstractErgebnistabelleCsvDTO {

  public static final int LISTENKANDIDATUREN_ERGEBNISTABELLE_ERSTE_POSITION = ERGEBNISTABELLE_LETZTE_POSITION + 1;

  @CsvField(pos = LISTENKANDIDATUREN_ERGEBNISTABELLE_ERSTE_POSITION)
  @CsvHeader("Gruppe-Schluessel")
  protected String gruppeSchluessel;

  @CsvAttachedList(clazz = EinfacheStimmenCsvDTO.class)
  protected List<EinfacheStimmenCsvDTO> listenkandidaturStimmen;

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

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

    return listenkandidaturStimmen.size();
  }

  public ListenkandidaturenErgebnistabelleCsvDTO() {
    // benötigt für JSEFA-Exportlogik
  }

  public ListenkandidaturenErgebnistabelleCsvDTO(ListenkandidaturenErgebnistabelleZeilenSchluessel schluessel) {
    super(schluessel);
    setGruppe(schluessel.getGruppe());
    this.listenkandidaturStimmen = new ArrayList<>();
  }

  public void setGruppe(Gruppe gruppe) {
    setGruppeSchluessel(gruppe.getSchluessel());
  }

  public String getGruppeSchluessel() {
    return gruppeSchluessel;
  }

  public void setGruppeSchluessel(String gruppeSchluessel) {
    this.gruppeSchluessel = gruppeSchluessel;
  }

  public List<EinfacheStimmenCsvDTO> getListenkandidaturStimmen() {
    return listenkandidaturStimmen;
  }

  public void clearListenkandidaturStimmen() {
    listenkandidaturStimmen.clear();
  }

  public void addListenkandidaturStimmen(long anzahlStimmen) {
    addListenkandidaturStimmen(EinfacheStimmenCsvDTO.create(anzahlStimmen));
  }

  public void addListenkandidaturStimmen(EinfacheStimmenCsvDTO anzahlStimmen) {
    listenkandidaturStimmen.add(anzahlStimmen);
  }
}
