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

import java.util.Collection;

import javax.annotation.Nullable;

import de.ivu.elect.business.gruppeimgebiet.entity.GruppeImGebiet;
import de.ivu.elect.business.kandidatur.boundary.WaehlerBenannteKandidaturKonfiguration;
import de.ivu.elect.business.kandidatur.entity.KandidaturStimmzettelPersonendaten;
import de.ivu.elect.business.kandidatur.entity.Listenkandidatur;
import de.ivu.elect.business.kandidatur.entity.ListenkandidaturStimmzettelPosition;
import de.ivu.elect.business.stimmzettel.entity.EntityAufStimmzettelDaten;
import de.ivu.elect.business.wahl.entity.Wahl;
import de.ivu.elect.business.wahlvorschlag.entity.WahlvorschlagStimmzettelPosition;

public class ListenkandidaturstimmeLabelGenerator extends AbstractStimmeLabelGenerator {

  private static final long serialVersionUID = 1L;

  public ListenkandidaturstimmeLabelGenerator() {
    super();
  }

  public ListenkandidaturstimmeLabelGenerator(StimmeLabelMessages stimmeLabelMessages, WaehlerBenannteKandidaturKonfiguration waehlerBenannteKandidaturKonfiguration) {
    super(stimmeLabelMessages, waehlerBenannteKandidaturKonfiguration);
  }

  public String formatListenstimmeAnzahlGueltigeKennung(EntityAufStimmzettelDaten entityAufStimmzettelDaten, WahlvorschlagStimmzettelPosition listeStimmzettelPosition,
      Listenkandidatur listenkandidatur) {
    if (listenkandidatur != null) {
      return formatListenstimmeAnzahlGueltigeKennung(listeStimmzettelPosition, getListenkandidaturStimmzettelPosition(entityAufStimmzettelDaten, listenkandidatur));
    }

    return "";
  }

  public String formatListenstimmeAnzahlGueltigeKennung(WahlvorschlagStimmzettelPosition listeStimmzettelPosition, ListenkandidaturStimmzettelPosition listenkandidaturStimmzettelPosition) {
    if (listenkandidaturStimmzettelPosition != null) {
      return listenkandidaturStimmzettelPosition.formatKennzahl(listeStimmzettelPosition);
    }

    return "";
  }

  public String formatListenstimmeAnzahlGueltigeListeAbzueglichStimmenFuerAlleListenkandidaturenKennung(GruppeImGebiet gruppeImGebiet, WahlvorschlagStimmzettelPosition listeStimmzettelPosition) {
    if (gruppeImGebiet != null) {
      return formatListenstimmeAnzahlGueltigeListeAbzueglichStimmenFuerAlleListenkandidaturenKennung(gruppeImGebiet.getWahl(), listeStimmzettelPosition);
    }

    return "";
  }

  public String formatListenstimmeAnzahlGueltigeListeAbzueglichStimmenFuerAlleListenkandidaturenKennung(Wahl wahl, WahlvorschlagStimmzettelPosition listeStimmzettelPosition) {
    if (listeStimmzettelPosition != null) {
      return listeStimmzettelPosition.formatKennzahl();
    }

    return "";
  }

  @Nullable
  public ListenkandidaturStimmzettelPosition getListenkandidaturStimmzettelPosition(EntityAufStimmzettelDaten entityAufStimmzettelDaten, Listenkandidatur listenkandidatur) {
    if (listenkandidatur != null) {
      return listenkandidatur.getStimmzettelPosition(entityAufStimmzettelDaten);
    }

    return null;
  }

  public KandidaturStimmzettelPersonendaten getListenkandidaturStimmzettelName(EntityAufStimmzettelDaten entityAufStimmzettelDaten, Listenkandidatur listenkandidatur) {
    if (listenkandidatur != null) {
      return listenkandidatur.getStimmzettelPersonendaten(entityAufStimmzettelDaten);
    }

    return KandidaturStimmzettelPersonendaten.EMPTY;
  }

  public String formatListenstimmeAnzahlGueltigeGruppeBezeichnung(EntityAufStimmzettelDaten entityAufStimmzettelDaten, GruppeImGebiet gruppeImGebiet, Collection<GruppeImGebiet> gruppenImGebiet) {
    return getWahlvorschlagStimmzettelKurzname(entityAufStimmzettelDaten, gruppeImGebiet);
  }
}
