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

import java.util.List;

import javax.inject.Inject;

import de.ivu.elect.business.gruppeimgebiet.entity.GruppeImGebiet;
import de.ivu.elect.business.stimmeingabe.control.NlDefaultListenwahlStimmeingabeKonfiguration;
import de.ivu.elect.business.stimmeingabe.control.StimmeingabeErfassenContext;
import de.ivu.elect.business.stimmeingabe.entity.StimmeingabeGruppeStimmen;
import de.ivu.elect.business.stimmeingabe.entity.StimmeingabeGruppeStimmenErfassenModel;
import de.ivu.elect.business.stimmeingabe.entity.StimmeingabeListenkandidaturStimmenErfassenModel;
import de.ivu.elect.business.wahl.entity.Wahl;

public class NlDefaultListenwahlStimmeingabeErfassenModelBuilder extends AbstractStimmeingabeErfassenModelBuilder
    implements
      StimmeingabeGruppeStimmenErfassenModelBuilder,
      StimmeingabeListenkandidaturStimmenErfassenModelBuilder {

  private static final long serialVersionUID = 1L;

  @Inject
  private transient NlDefaultListenwahlStimmeingabeKonfiguration stimmeingabeKonfiguration;

  @Inject
  private transient NlStimmeingabeKopfzahlModelBuilder stimmeingabeKopfzahlModelBuilder;

  @Inject
  private transient NlDefaultListenwahlStimmeingabeGruppeStimmenModelBuilder stimmeingabeGruppeStimmenModelBuilder;

  @Inject
  private transient NlDefaultListenwahlStimmeingabeListenkandidaturStimmenModelBuilder stimmeingabeListenkandidaturStimmenModelBuilder;

  public NlDefaultListenwahlStimmeingabeErfassenModelBuilder() {
    super();
  }

  @Override
  public boolean isApplicable(Wahl wahl) {
    return getStimmeingabeKonfiguration().isApplicable(wahl);
  }

  private NlDefaultListenwahlStimmeingabeKonfiguration getStimmeingabeKonfiguration() {
    return stimmeingabeKonfiguration;
  }

  @Override
  public NlStimmeingabeKopfzahlModelBuilder getStimmeingabeKopfzahlModelBuilder() {
    return stimmeingabeKopfzahlModelBuilder;
  }

  public NlDefaultListenwahlStimmeingabeGruppeStimmenModelBuilder getStimmeingabeGruppeStimmenModelBuilder() {
    return stimmeingabeGruppeStimmenModelBuilder;
  }

  public NlDefaultListenwahlStimmeingabeListenkandidaturStimmenModelBuilder getStimmeingabeListenkandidaturStimmenModelBuilder() {
    return stimmeingabeListenkandidaturStimmenModelBuilder;
  }

  @Override
  public StimmeingabeGruppeStimmenErfassenModel createGruppeStimmenErfassenModel(StimmeingabeErfassenContext context) {
    return getStimmeingabeGruppeStimmenModelBuilder().createModelStimmeingabeGruppeStimmen(context);
  }

  @Override
  public List<StimmeingabeGruppeStimmen> layoutStimmeingabenSystemGruppeStimmen(StimmeingabeGruppeStimmenErfassenModel model, StimmeingabeGruppeStimmenErfassenModelContext context) {
    return getStimmeingabeGruppeStimmenModelBuilder().layoutModelStimmeingabeSystemGruppeStimmen(model, context);
  }

  @Override
  public List<StimmeingabeGruppeStimmen> layoutStimmeingabenGruppeStimmen(StimmeingabeGruppeStimmenErfassenModel model, StimmeingabeGruppeStimmenErfassenModelContext context) {
    return getStimmeingabeGruppeStimmenModelBuilder().layoutModelStimmeingabePolitischeGruppeStimmen(model, context);
  }

  @Override
  public List<StimmeingabeGruppeStimmen> layoutStimmeingabenSystemGruppeStimmenBottom(StimmeingabeGruppeStimmenErfassenModel model, StimmeingabeGruppeStimmenErfassenModelContext context) {
    return getStimmeingabeGruppeStimmenModelBuilder().layoutModelStimmeingabeSystemGruppeStimmenBottom(model, context);
  }

  @Override
  public List<StimmeingabeListenkandidaturStimmenErfassenModel> createListenkandidaturStimmenErfassenModelForAllApplicableGruppeImGebiet(StimmeingabeErfassenContext context) {
    return getStimmeingabeListenkandidaturStimmenModelBuilder().createModelStimmeingabeListenkandidaturStimmenPerApplicableGruppeImGebiet(context);
  }

  @Override
  public StimmeingabeListenkandidaturStimmenErfassenModel createListenkandidaturStimmenErfassenModel(GruppeImGebiet gruppeImGebiet, StimmeingabeErfassenContext context) {
    return getStimmeingabeListenkandidaturStimmenModelBuilder().createModelStimmeingabeListenkandidaturStimmen(gruppeImGebiet, context);
  }
}
