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

import de.ivu.elect.business.kandidatur.entity.KandidaturKumulierteStimmen;
import de.ivu.elect.business.kandidatur.entity.NlKandidaturKumulierteStimmen;
import de.ivu.elect.jee.faces.Messages;
import de.ivu.elect.jee.presentation.Icons;
import de.ivu.elect.jee.presentation.dynamictable.ColumnType;
import de.ivu.elect.presentation.table.AbstractColumnEntry;

import javax.annotation.Nullable;

public class NlKandidaturKumulierteStimmenAnzahlListenstimmenGewichtetColumn extends AbstractColumnEntry<KandidaturKumulierteStimmen> {

  private static final long serialVersionUID = 1L;

  private final Icons icons;

  public NlKandidaturKumulierteStimmenAnzahlListenstimmenGewichtetColumn(Messages messages, Icons icons) {
    super(messages);

    this.icons = icons;
  }

  @Override
  public Object getValue(KandidaturKumulierteStimmen kandidaturKumulierteStimmen) {
    if (kandidaturKumulierteStimmen instanceof NlKandidaturKumulierteStimmen) {
      return ((NlKandidaturKumulierteStimmen) kandidaturKumulierteStimmen).getAnzahlListenstimmenGewichtet();
    }
    return kandidaturKumulierteStimmen.getAnzahlListenstimmen(); // Fallback auf ungewichtete Listenstimmen
  }

  @Override
  public String getHeader() {
    return getMessage("kandidatur.kumulierte.stimmen.anzahl.stimmen.gewichtet");
  }

  @Override
  public ColumnType getType() {
    return ColumnType.LONG;
  }

  @Override
  public boolean isIconPresent() {
    return true;
  }

  @Override
  public boolean isIconRendered(KandidaturKumulierteStimmen entity) {
    return super.isIconRendered(entity) || entity.isAnzahlListenstimmenNichtErgebnisrelevantVorhanden();
  }

  @Nullable
  @Override
  public String getIcon(KandidaturKumulierteStimmen entity) {
    if (entity.isAnzahlListenstimmenNichtErgebnisrelevantVorhanden()) {
      return icons.getIconWarning();
    }

    return super.getIcon(entity);
  }

  @Override
  public String getTooltip(KandidaturKumulierteStimmen entity) {
    if (entity.isAnzahlListenstimmenNichtErgebnisrelevantVorhanden()) {
      return getMessage("kandidatur.listenkandidatur.stimmen.nicht.ergebnisrelevant.vorhanden", entity.getAnzahlListenstimmenNichtErgebnisrelevant());
    }

    return super.getTooltip(entity);
  }

  @Nullable
  @Override
  public String getIconTitle(KandidaturKumulierteStimmen entity) {
    if (entity.isAnzahlListenstimmenNichtErgebnisrelevantVorhanden()) {
      return getMessage("kandidatur.listenkandidatur.stimmen.nicht.ergebnisrelevant.vorhanden", entity.getAnzahlListenstimmenNichtErgebnisrelevant());
    }

    return super.getIconTitle(entity);
  }
}
