
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.PolitischeGruppe;
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 DefaultListenkandidaturenErgebnistabelleCsvDTO extends AbstractErgebnistabelleCsvDTO implements ListenkandidaturenErgebnistabelleCsvDTO {

  public static final int LISTENKANDIDATUREN_ERGEBNISTABELLE_ERSTE_POSITION = ERGEBNISTABELLE_LETZTE_POSITION + 1;

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

  private Long anzahlStimmenNurListe;

  private Long anzahlStimmenNurListenkandidaturen;

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

  public DefaultListenkandidaturenErgebnistabelleCsvDTO() {
    super();
  }

  public DefaultListenkandidaturenErgebnistabelleCsvDTO(ListenkandidaturenErgebnistabelleZeilenSchluessel schluessel) {
    super(schluessel);

    PolitischeGruppe gruppe = schluessel.getGruppe();
    setGruppeSchluessel(gruppe.getSchluessel());
  }

  public String getGruppeSchluessel() {
    return gruppeSchluessel;
  }

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

  @Override
  public Long getAnzahlStimmenNurListe() {
    return anzahlStimmenNurListe;
  }

  @Override
  public void setAnzahlStimmenNurListe(Long anzahlStimmenNurListe) {
    this.anzahlStimmenNurListe = anzahlStimmenNurListe;
  }

  @Override
  public Long getAnzahlStimmenNurListenkandidaturen() {
    return anzahlStimmenNurListenkandidaturen;
  }

  @Override
  public void setAnzahlStimmenNurListenkandidaturen(Long anzahlStimmenNurListenkandidaturen) {
    this.anzahlStimmenNurListenkandidaturen = anzahlStimmenNurListenkandidaturen;
  }

  public List<EinfacheStimmenCsvDTO> getListenkandidaturStimmen() {
    if (listenkandidaturStimmen == null) {
      listenkandidaturStimmen = new ArrayList<>();
    }

    return listenkandidaturStimmen;
  }

  @Override
  public void addListenkandidaturStimmen(Long anzahlStimmen) {
    getListenkandidaturStimmen().add(EinfacheStimmenCsvDTO.create(notNull(anzahlStimmen)));
  }

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

  @Override
  public int getAnzahlSubDTO() {
    return getListenkandidaturStimmen().size();
  }
}
