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

import java.util.stream.Collectors;

import javax.ejb.Stateless;
import javax.inject.Inject;

import de.ivu.elect.business.exchange.control.AbstractExporter;
import de.ivu.elect.business.exchange.control.ExportExchange;
import de.ivu.elect.business.exchange.entity.DateiExportArt;
import de.ivu.elect.business.gebietsbaum.control.AnzahlWahlberechtigteExportExchange;
import de.ivu.elect.business.gebietsbaum.control.GebietByBreadthFirstComparator;
import de.ivu.elect.business.gebietsbaum.entity.AnzahlWahlberechtigteExchangeObjekt;
import de.ivu.elect.business.gebietsbaum.entity.AnzahlWahlberechtigteExportContext;

@Stateless
public class AnzahlWahlberechtigteExporter extends AbstractExporter<AnzahlWahlberechtigteExchangeObjekt, AnzahlWahlberechtigteExportContext> {

  @Inject
  private transient AnzahlWahlberechtigteExportExchange anzahlWahlberechtigteExportExchange;

  @Inject
  private transient WahldurchfuehrungsgebietDAO wahldurchfuehrungsgebietDAO;

  @Override
  protected ExportExchange<AnzahlWahlberechtigteExchangeObjekt, AnzahlWahlberechtigteExportContext> getExchange() {
    return anzahlWahlberechtigteExportExchange;
  }

  @Override
  protected AnzahlWahlberechtigteExchangeObjekt getExportObject(AnzahlWahlberechtigteExportContext context) {
    return new AnzahlWahlberechtigteExchangeObjekt(
        wahldurchfuehrungsgebietDAO.findByWahl(context.getWahl()).stream().sorted(GebietByBreadthFirstComparator.INSTANCE).collect(Collectors.toList()));
  }

  @Override
  protected DateiExportArt getDateiExportArt() {
    return DateiExportArt.ANZAHL_WAHLBERECHTIGTE_EXPORT;
  }

  @Override
  protected boolean isExportHeader() {
    return true;
  }
}
