
package de.ivu.elect.dokumente.stimmzettel;

import static java.util.Collections.emptyList;

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

import de.ivu.elect.business.gebietsbaum.boundary.WahlverwaltungGebietInformation;
import de.ivu.elect.business.stimmzettel.entity.StimmzettelDaten;
import de.ivu.elect.business.wahl.entity.Wahl;
import de.ivu.elect.business.wahlvorschlag.entity.Wahlvorschlag;

public class DefaultStimmzettelByWahlvorschlaegeAlsListeDokumentGeneratorDocumentMapperExportMapperSupport extends AbstractStimmzettelByDokumentGeneratorDocumentMapperSupport<List<Wahlvorschlag>> {

  public DefaultStimmzettelByWahlvorschlaegeAlsListeDokumentGeneratorDocumentMapperExportMapperSupport() {
    super();
  }

  @Override
  public boolean isAcceptContext(Wahl wahl) {
    return isDirektwahl(wahl);
  }

  public List<Wahlvorschlag> collectDokumentEntities(Wahl wahl, WahlverwaltungGebietInformation auswertungsgebietInformation,
      List<Entry<WahlverwaltungGebietInformation, StimmzettelDaten>> stimmzettelDatenPerStimmzettelgebiet) {
    if (isDirektwahl(wahl)) {
      return collectDokumentEntitiesDirektwahl(wahl, auswertungsgebietInformation, stimmzettelDatenPerStimmzettelgebiet);
    }

    return emptyList();
  }

  private List<Wahlvorschlag> collectDokumentEntitiesDirektwahl(Wahl wahl, WahlverwaltungGebietInformation auswertungsgebietInformation,
      List<Entry<WahlverwaltungGebietInformation, StimmzettelDaten>> stimmzettelDatenPerStimmzettelgebiet) {
    List<Wahlvorschlag> result = new ArrayList<>();

    for (Entry<WahlverwaltungGebietInformation, StimmzettelDaten> entry : stimmzettelDatenPerStimmzettelgebiet) {
      result.addAll(entry.getValue().getDirektkandidatenAufgestellt());
    }

    return result;
  }
}
