
package de.ivu.elect.presentation.gruppeimgebiet.table;

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

import java.util.Collection;

import de.ivu.elect.business.gebietsbaum.entity.Gebiet;
import de.ivu.elect.business.gruppeimgebiet.entity.GruppeImGebiet;
import de.ivu.elect.business.stimmzettel.entity.EntityAufStimmzettelDaten;
import de.ivu.elect.business.wahlvorschlag.entity.Direktkandidat;
import de.ivu.elect.business.wahlvorschlag.entity.DirektkandidatConstants;
import de.ivu.elect.business.wahlvorschlag.entity.Wahlvorschlag;
import de.ivu.elect.jee.faces.Messages;
import de.ivu.elect.presentation.wahl.CurrentWahlZulassungspruefungExtended;

public class GruppeImGebietDirektkandidatZulassungColumn extends AbstractGruppeImGebietWahlvorschlagZulassungColumn<Direktkandidat> {

  private static final long serialVersionUID = 1L;

  public GruppeImGebietDirektkandidatZulassungColumn(Messages messages, Gebiet gebiet, EntityAufStimmzettelDaten entityAufStimmzettelDaten,
      CurrentWahlZulassungspruefungExtended currentWahlZulassungspruefung) {
    super(messages, gebiet, entityAufStimmzettelDaten, currentWahlZulassungspruefung);
  }

  @Override
  public String getHeader() {
    return getMessage(DirektkandidatConstants.MESSAGE_KEY_ENTITY_EINZAHL);
  }

  @Override
  protected String getValue(Direktkandidat direktkandidat) {
    return direktkandidat.getDirektkandidatur().getStimmzettelPersonendaten(getGebiet(), getEntityAufStimmzettelDaten()).getName();
  }

  @Override
  protected Direktkandidat findWahlvorschlag(GruppeImGebiet gruppeImGebiet, Collection<Wahlvorschlag> wahlvorschlaegeInWahl) {
    for (Wahlvorschlag wahlvorschlag : wahlvorschlaegeInWahl) {
      if (wahlvorschlag.isDirektkandidat() && isWahlvorschlagRelevantInGebietshierarchie(gruppeImGebiet, wahlvorschlag)) {
        return castTo(wahlvorschlag, Direktkandidat.class);
      }
    }

    return null;
  }
}
