
package de.ivu.elect.dokumente.stimmeingabe;

import de.ivu.elect.business.gebietsbaum.boundary.WahlverwaltungGebietInformation;
import de.ivu.elect.business.gebietsbaum.entity.Gebiet;
import de.ivu.elect.business.gruppe.entity.Gruppe;
import de.ivu.elect.business.kandidatur.entity.Kandidatur;
import de.ivu.elect.business.stimmzettel.entity.EntityAufStimmzettelDaten;
import de.ivu.elect.business.wahlvorschlag.entity.Wahlvorschlag;
import de.ivu.elect.dokumente.CoreElectContext;
import de.ivu.elect.dokumente.gebiet.GebietDokument;
import de.ivu.elect.dokumente.kandidatur.CoreKandidaturDokument;
import de.ivu.elect.dokumente.kandidatur.KandidaturCoreDaten;
import de.ivu.elect.dokumente.wahlvorschlag.CoreWahlvorschlagsdatenDocument;
import de.ivu.elect.dokumente.wahlvorschlag.GruppeDokument;

public class CoreStimmeingabeDocumentBuilder {

  public CoreStimmeingabeDocumentBuilder() {
    super();
  }

  public GruppeDokument createGruppeDocument(CoreElectContext coreElectContext, Gruppe gruppe) {
    return new GruppeDokument(gruppe);
  }

  public GebietDokument createGebietDocument(CoreElectContext coreElectContext, Gebiet gebiet) {
    if (gebiet != null) {
      return GebietDokument.lookupOrCreate(coreElectContext, gebiet);
    }

    return GebietDokument.EMPTY_OBJECT;
  }

  public GebietDokument createGebietDocument(CoreElectContext coreElectContext, WahlverwaltungGebietInformation wahlverwaltungGebietInformation) {
    return new GebietDokument(coreElectContext, wahlverwaltungGebietInformation.getName(), wahlverwaltungGebietInformation.getNummer());
  }

  public StimmeingabeDocument createStimmeingabeDocument(StimmeingabeDocumentContext context) {
    return new StimmeingabeDocument(context);
  }

  public GruppeStimmenDocument createGruppeStimmenDocument(StimmeingabeDocumentContext context) {
    return new GruppeStimmenDocument(!context.isEingabenAnzahlenStimmenIncluded());
  }

  public KandidatStimmenDocument createKandidatStimmenDocument(StimmeingabeDocumentContext context) {
    return new KandidatStimmenDocument(!context.isEingabenAnzahlenStimmenIncluded());
  }

  public ListeStimmenDocument createListeStimmenDocument(StimmeingabeDocumentContext context) {
    return new ListeStimmenDocument(!context.isEingabenAnzahlenStimmenIncluded());
  }

  public CoreWahlvorschlagsdatenDocument createWahlvorschlagsdatenDocument(StimmeingabeDocumentContext context, EntityAufStimmzettelDaten entityAufStimmzettelDaten, Wahlvorschlag wahlvorschlag) {
    return CoreWahlvorschlagsdatenDocument.lookupOrCreate(context, entityAufStimmzettelDaten, wahlvorschlag, null);
  }

  public CoreKandidaturDokument createKandidaturdatenDokument(StimmeingabeDocumentContext context, EntityAufStimmzettelDaten entityAufStimmzettelDaten, Wahlvorschlag wahlvorschlag,
                                                              Kandidatur kandidatur, Long laufendeNummer) {
    return CoreKandidaturDokument.lookupOrCreate(context, createWahlvorschlagsdatenDocument(context, entityAufStimmzettelDaten, wahlvorschlag),
        new KandidaturCoreDaten(context, entityAufStimmzettelDaten), kandidatur, laufendeNummer);
  }

  public ReferendumVorlageStimmenDocument createReferendumVorlageStimmenDocument(StimmeingabeDocumentContext context) {
    return new ReferendumVorlageStimmenDocument(!context.isEingabenAnzahlenStimmenIncluded());
  }

  public ReferendumOptionStimmenDocument createReferendumOptionStimmenDocument(StimmeingabeDocumentContext context) {
    return new ReferendumOptionStimmenDocument(!context.isEingabenAnzahlenStimmenIncluded());
  }
}
