
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.KandidaturenReihenfolgeErgebnisKonfliktCustomData;
import de.ivu.elect.business.ergebniskonflikt.entity.KandidaturenReihenfolgeTypisiertErgebnisKonfliktCustomData;
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 KandidaturenReihenfolgeErgebnisKonfliktBehandler<E extends Kandidatur> extends AbstractReihenfolgeErgebnisKonfliktBehandler<E, KandidaturTeilnehmer<E>> {

  private final Enum< ? > losentscheidTyp;

  private final Object[] otherParams;

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

    this.losentscheidTyp = losentscheidTyp;

    this.otherParams = otherParams;
  }

  @Override
  protected ErgebnisKonflikt erzeugeKonflikt(List<E> beteiligteKandidaturen) {
    KandidaturenReihenfolgeErgebnisKonfliktCustomData customData = new KandidaturenReihenfolgeTypisiertErgebnisKonfliktCustomData(losentscheidTyp);

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

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

    return customData.getGelosteKandidaturen(kandidaturen);
  }
}
