
package de.ivu.elect.business.gebietsbaum.control;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

import javax.annotation.Nullable;

import de.ivu.elect.business.gebietsbaum.entity.Gebiet;
import de.ivu.elect.business.gebietsbaum.entity.Gebietsart;
import de.ivu.elect.business.wahl.entity.Wahl;

/**
 * Dient als ImportObject bzw. ExportObject beim Import und Export von Gebieten. Gebietsgruppierungen wurden im Rahmen
 * von ELECT-4332 ergänzt., sind aber bei den meisten Importen nicht vorhanden und werden beim Export zurzeit nicht mit
 * exportiert.
 */
public class Gebietsbaum implements Serializable {

  private static final long serialVersionUID = 1L;

  @Nullable
  private final Wahl wahl;

  private final List<Gebiet> gebiete;

  private final List<Gebietsart> gebietsarten;

  public Gebietsbaum(@Nullable Wahl wahl, List<Gebiet> gebiete) {
    this(wahl, gebiete, new ArrayList<>());
  }

  public Gebietsbaum(@Nullable Wahl wahl, List<Gebiet> gebiete, List<Gebietsart> gebietsarten) {
    super();

    this.wahl = wahl;
    this.gebiete = gebiete;
    this.gebietsarten = gebietsarten;
  }

  @Nullable
  public Wahl getWahl() {
    return wahl;
  }

  public List<Gebiet> getGebiete() {
    return gebiete;
  }

  public List<Gebietsart> getGebietsarten() {
    return gebietsarten;
  }

  public Optional<Gebiet> findWurzelgebiet() {
    return gebiete.stream().filter(Gebiet::isWurzelgebiet).findAny();
  }
}
