
package de.ivu.elect.dokumente.wahltermin;

import java.util.ArrayList;
import java.util.List;
import java.util.function.Function;

import de.ivu.document.generator.template.annotations.Document;
import de.ivu.document.generator.template.annotations.DocumentRepeat;
import de.ivu.elect.business.dokumente.entity.DokumentVorlageArt;
import de.ivu.elect.business.gebietsbaum.entity.Gebiet;
import de.ivu.elect.business.wahl.entity.Wahl;
import de.ivu.elect.business.wahl.entity.WahlOderWahltermin;
import de.ivu.elect.business.wahl.entity.Wahltermin;
import de.ivu.elect.dokumente.BaseElectContext;

@Document(DokumentVorlageArt.WAHLTERMIN_DOCUMENT_PREFIX)
public class WahlterminDokument extends AbstractWahlOderWahlterminDokument {

  private static final long serialVersionUID = 1L;

  @DocumentRepeat(value = "Wahlen", elementClass = WahlDocument.class, itemName = "wahl")
  public final List<WahlDocument> wahlen;

  public WahlterminDokument(BaseElectContext baseElectContext, Function<WahlOderWahltermin, List<Gebiet>> gebieteLoader,
      Function<Gebiet, PlatzhalterWahlhelfereinsatzortDokument> wahlhelfereinsatzortBuilder) {
    super(baseElectContext.getWahltermin(), baseElectContext, gebieteLoader, wahlhelfereinsatzortBuilder);

    Wahltermin wahltermin = baseElectContext.getWahltermin();

    this.wahlen = new ArrayList<>();

    for (Wahl wahl : wahltermin.getWahlenSortiertNachPosition()) {
      this.wahlen.add(new WahlDocument(new BaseElectContext(baseElectContext, wahl), gebieteLoader, wahlhelfereinsatzortBuilder));
    }
  }
}
