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

import static org.apache.commons.lang3.StringUtils.defaultIfBlank;
import static org.apache.commons.lang3.StringUtils.trimToEmpty;

import de.ivu.elect.business.ergebnis.entity.Ergebnisart;
import de.ivu.elect.business.gruppe.entity.GruppeKumulierteStimmen;
import de.ivu.elect.jee.faces.Messages;

public class GruppeKumulierteStimmenAnteilDirektstimmenErgebnisartFuerDifferenzColumn extends AbstractGruppeKumulierteStimmenAnteilColumn {

  private static final long serialVersionUID = 1L;

  private final Ergebnisart ergebnisartFuerDifferenz;

  public GruppeKumulierteStimmenAnteilDirektstimmenErgebnisartFuerDifferenzColumn(Messages messages, Ergebnisart ergebnisartFuerDifferenz) {
    super(messages);

    this.ergebnisartFuerDifferenz = ergebnisartFuerDifferenz;
  }

  @Override
  public String getHeader() {
    return formatHeader(getMessage(ergebnisartFuerDifferenz));
  }

  @Override
  public String getHeaderIgnoringErgebnisartFuerDifferenz() {
    return formatHeader(getMessage(HEADER_IGNORING_ERGEBNISART_FUER_DIFFERENZ_PLACEHOLDER_MSG_KEY));
  }

  private String formatHeader(Object... params) {
    return getMessage("gruppe.kumulierte.stimmen.anteil.ergebnisart.fuer.differenz", params);
  }

  @Override
  protected Double getValueInternal(GruppeKumulierteStimmen gruppeKumulierteStimmen) {
    if (gruppeKumulierteStimmen.isHatDirektkandidatenInGebietshierarchie() || gruppeKumulierteStimmen.isAnzahlDirektstimmenVorperiodeVorhanden()) {
      return gruppeKumulierteStimmen.getAnteilDirektstimmenVorperiode(); // WASDE-860
    }

    return null;
  }

  @Override
  public String getTooltip(GruppeKumulierteStimmen gruppeKumulierteStimmen) {
    return defaultIfBlank(super.getTooltip(gruppeKumulierteStimmen), gruppeKumulierteStimmen.getAnteilDirektstimmenVorperiodeTooltip());
  }

  @Override
  public String getStyleClass() {
    return trimToEmpty(super.getStyleClass()) + " " + AbstractGruppeKumulierteStimmenColumn.DIFFERENZ_COLUMN_STYLE_CLASS;
  }
}
