
package de.ivu.elect.business.ergebniskonflikt.control.util;

import java.util.List;

import de.ivu.elect.business.ergebniskonflikt.entity.ErgebnisKonflikt;
import de.ivu.elect.business.ergebniskonflikt.entity.KandidaturenAuswaehlenErgebnisKonfliktCustomData;
import de.ivu.elect.business.ergebniskonflikt.entity.KandidaturenAuswaehlenTypisiertErgebnisKonfliktCustomData;
import de.ivu.elect.business.kandidatur.entity.Kandidatur;
import de.ivu.elect.business.sitzberechnung.control.util.SitzberechnungProGebietHelper;
import de.ivu.elect.business.sitzberechnung.control.verteilung.KandidaturTeilnehmer;

public class KandidaturenAuswaehlenErgebnisKonfliktBehandler<E extends Kandidatur> extends AbstractVerteilungErgebnisKonfliktBehandler<E, KandidaturTeilnehmer<E>> {

  private final Enum< ? > losentscheidTyp;

  private final Object[] otherParams;

  public KandidaturenAuswaehlenErgebnisKonfliktBehandler(SitzberechnungProGebietHelper helper, Enum< ? > losentscheidTyp, Object... otherParams) {
    super(helper);

    this.losentscheidTyp = losentscheidTyp;

    this.otherParams = otherParams;
  }

  @Override
  protected ErgebnisKonflikt erzeugeKonflikt(List<E> beteiligteKandidaturen, long anzahlZuLosen) {
    KandidaturenAuswaehlenErgebnisKonfliktCustomData customData = new KandidaturenAuswaehlenTypisiertErgebnisKonfliktCustomData(losentscheidTyp);

    return helper.createKandidatenAuswahlKonflikt(customData, anzahlZuLosen, beteiligteKandidaturen, losentscheidTyp, otherParams);
  }

  @Override
  protected List<E> getGelosteTeilnehmerAusKonfliktBehandlung(List<E> beteiligteKandidaturen, ErgebnisKonflikt geloesterKonflikt) {
    KandidaturenAuswaehlenErgebnisKonfliktCustomData customData = geloesterKonflikt.getCustomData(KandidaturenAuswaehlenErgebnisKonfliktCustomData.class);

    return customData.getGelosteKandidaturen(beteiligteKandidaturen);
  }
}
