
package de.ivu.elect.dokumente;

import java.io.Serializable;

import javax.inject.Inject;

import de.ivu.elect.business.benutzerverwaltung.entity.AbstractBenutzer;
import de.ivu.elect.business.dokumente.entity.NoDokumentExtraFileOutput;
import de.ivu.elect.business.gebietsbaum.boundary.GebietDAO;
import de.ivu.elect.business.gruppe.boundary.GruppeDAO;
import de.ivu.elect.business.kandidatur.boundary.WaehlerBenannteKandidaturKonfiguration;
import de.ivu.elect.business.kandidatur.control.StimmzettelFormatter;
import de.ivu.elect.business.security.Customer;
import de.ivu.elect.business.stimmzettel.boundary.AnzahlStimmenProWaehlerBestimmer;
import de.ivu.elect.business.wahlausschuss.boundary.WahlausschussEntschaedigungDAO;
import de.ivu.elect.business.wahlvorschlag.boundary.WahlvorschlagDAO;
import de.ivu.elect.business.wahlvorschlag.boundary.WahlvorschlagUnterstuetzerNotwendigErmittler;
import de.ivu.elect.presentation.gebietsbaum.GebietNummerFormatter;
import de.ivu.elect.presentation.person.PersonendatenFormatter;


import static java.util.Collections.emptyList;

public class CoreElectContextBuilder implements Serializable {

  private static final long serialVersionUID = 1L;

  public static final CoreElectContext EMPTY = new CoreElectContext(
      new BaseElectContext(NoDokumentExtraFileOutput.INSTANCE, AbstractBenutzer.SYSTEM, null, null, null, new PersonendatenFormatter(), emptyList(),
          new CoreElectCustomDataDocumentBuilder(),
          new GebietNummerFormatter(), EmptyWahlParameterLoader.INSTANCE, EmptyKonfigurationLoader.INSTANCE, null, Customer.TEST),
      new AnzahlStimmenProWaehlerBestimmer(), new StimmzettelFormatter(), new GruppeDAO(), new GebietDAO(), new WahlausschussEntschaedigungDAO(),
      new WahlvorschlagDAO(),
      new WahlvorschlagUnterstuetzerNotwendigErmittler(), new WaehlerBenannteKandidaturKonfiguration());

  @Inject
  private transient GruppeDAO gruppeDAO;

  @Inject
  private transient GebietDAO gebietDAO;

  @Inject
  private transient WahlvorschlagDAO wahlvorschlagDAO;

  @Inject
  private transient WahlausschussEntschaedigungDAO wahlausschussEntschaedigungDAO;

  @Inject
  private transient AnzahlStimmenProWaehlerBestimmer anzahlStimmenProWaehlerBestimmer;

  @Inject
  private transient StimmzettelFormatter stimmzettelFormatter;

  @Inject
  private transient WahlvorschlagUnterstuetzerNotwendigErmittler wahlvorschlagUnterstuetzerNotwendigErmittler;

  @Inject
  private transient WaehlerBenannteKandidaturKonfiguration waehlerBenannteKandidaturKonfiguration;

  public CoreElectContextBuilder() {
    super();
  }

  public CoreElectContext create(BaseElectContext baseElectContext) {
    return new CoreElectContext(baseElectContext, anzahlStimmenProWaehlerBestimmer, stimmzettelFormatter, gruppeDAO, gebietDAO, wahlausschussEntschaedigungDAO,
        wahlvorschlagDAO,
        wahlvorschlagUnterstuetzerNotwendigErmittler, waehlerBenannteKandidaturKonfiguration);
  }
}
