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

import static de.ivu.elect.jee.entity.EntityUtil.castTo;

import java.util.Collection;

import javax.enterprise.inject.Specializes;
import javax.inject.Inject;

import de.ivu.elect.business.gebietsbaum.entity.Gebiet;
import de.ivu.elect.business.gebietsbaum.entity.Wahldurchfuehrungsgebiet;
import de.ivu.elect.business.sitzberechnung.control.Sitzberechnungsalgorithmus;
import de.ivu.elect.business.sitzberechnung.control.SitzberechnungsalgorithmusFinder;
import de.ivu.elect.business.wahlvorschlag.entity.Wahlvorschlag;

@Specializes
public class WasAnzahlStimmenProWaehlerBestimmer extends AnzahlStimmenProWaehlerBestimmer {

  @Inject
  private transient SitzberechnungsalgorithmusFinder sitzberechnungsalgorithmusFinder;

  public WasAnzahlStimmenProWaehlerBestimmer() {
    super();
  }

  @Override
  public boolean isWaehlerBenannteWahlvorschlaegeErfassbar(Gebiet gebiet, Collection< ? extends Wahlvorschlag> wahlvorschlaege) {
    if (gebiet != null && gebiet.isInstanceOf(Wahldurchfuehrungsgebiet.class)) {
      Wahldurchfuehrungsgebiet wahldurchfuehrungsgebiet = castTo(gebiet, Wahldurchfuehrungsgebiet.class);

      return getSitzberechnungsalgorithmus(wahldurchfuehrungsgebiet).isWaehlerBenannteWahlvorschlaegeErfassbar(wahldurchfuehrungsgebiet, wahlvorschlaege);
    }

    return false;
  }

  private Sitzberechnungsalgorithmus< ? > getSitzberechnungsalgorithmus(Wahldurchfuehrungsgebiet wahldurchfuehrungsgebiet) {
    return sitzberechnungsalgorithmusFinder.getSitzberechnungsalgorithmus(wahldurchfuehrungsgebiet.getWahldurchfuehrung());
  }
}
