
package de.ivu.elect.dokumente.veranstaltung;

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

import de.ivu.document.generator.template.annotations.DocumentComplexField;
import de.ivu.document.generator.template.annotations.DocumentRepeat;
import de.ivu.elect.business.veranstaltung.control.VeranstaltungByBeginnComparator;
import de.ivu.elect.business.veranstaltung.entity.Veranstaltung;
import de.ivu.elect.dokumente.BaseElectContext;
import de.ivu.elect.dokumente.ElectDocument;

public class VeranstaltungOhneTeilnehmerDocument extends ElectDocument {

  private static final long serialVersionUID = 1L;

  @DocumentComplexField("Veranstaltungsinformationen")
  public final Veranstaltungsinformationen veranstaltungsinformationen;

  @DocumentRepeat(value = "VerknuepfteVeranstaltungen", elementClass = Veranstaltungsinformationen.class, itemName = "veranstaltung")
  public final List<Veranstaltungsinformationen> verknuepfteVeranstaltungen;

  public VeranstaltungOhneTeilnehmerDocument(BaseElectContext baseElectContext, Veranstaltung veranstaltung) {
    super(baseElectContext);

    this.veranstaltungsinformationen = new Veranstaltungsinformationen(baseElectContext, veranstaltung);

    this.verknuepfteVeranstaltungen = erstelleVerknuepfteVeranstaltungen(baseElectContext, veranstaltung);
  }

  private List<Veranstaltungsinformationen> erstelleVerknuepfteVeranstaltungen(BaseElectContext baseElectContext, Veranstaltung veranstaltung) {
    List<Veranstaltungsinformationen> result = new ArrayList<>();

    ArrayList<Veranstaltung> alleVeranstaltungen = new ArrayList<>(veranstaltung.bestimmeAlleVerknuepfteVeranstaltungen());

    alleVeranstaltungen.remove(veranstaltung);
    Collections.sort(alleVeranstaltungen, new VeranstaltungByBeginnComparator());

    for (Veranstaltung verknuepfteVeranstaltung : alleVeranstaltungen) {
      result.add(new Veranstaltungsinformationen(baseElectContext, verknuepfteVeranstaltung));
    }

    return result;
  }
}
