
package de.ivu.elect.dokumente;

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.control.StimmzettelFormatter;
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 javax.inject.Inject;
import java.io.Serializable;
import java.util.Locale;
import java.util.TimeZone;

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, Locale.getDefault(), TimeZone.getDefault(), null, new PersonendatenFormatter(), emptyList(),
          new CoreElectCustomDataDocumentBuilder(), new GebietNummerFormatter(), EmptyWahlParameterLoader.INSTANCE, EmptyKonfigurationLoader.INSTANCE, null),
      new AnzahlStimmenProWaehlerBestimmer(), new StimmzettelFormatter(), new GruppeDAO(), new GebietDAO(), new WahlausschussEntschaedigungDAO(),
      new WahlvorschlagDAO(), new WahlvorschlagUnterstuetzerNotwendigErmittler());

  @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;


  public CoreElectContextBuilder() {
    super();
  }

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