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

import de.ivu.elect.business.auffaelligkeit.entity.AuffaelligkeitBenfordTestChartErgebnis;
import de.ivu.elect.business.auffaelligkeit.entity.BetrachteteStellenImAuffaelligkeitstestNachBenford;
import de.ivu.elect.business.stimmeingabe.entity.StimmeingabeAuffaelligkeit;
import de.ivu.elect.jee.faces.Messages;
import de.ivu.elect.jee.presentation.dynamictable.ColumnType;

public class AuffaelligkeitNachBenfordTestColumn extends AbstractStimmeingabeAuffaelligkeitColumn {

  private static final long serialVersionUID = 1L;

  public AuffaelligkeitNachBenfordTestColumn(Messages messages) {
    super(messages);
  }

  @Override
  public Object getValue(StimmeingabeAuffaelligkeit entity) {
    if (entity == null) {
      return "";
    }
    AuffaelligkeitBenfordTestChartErgebnis benfordTestErgebnisse = entity.getBenfordTestErgebnisse().stream()
        .filter(auffaelligkeitBenfordTestChartErgebnis -> auffaelligkeitBenfordTestChartErgebnis.getBetrachteteStellen().equals(
        BetrachteteStellenImAuffaelligkeitstestNachBenford.ALLE_STELLEN))
        .findFirst().orElse(null);
    if (benfordTestErgebnisse == null) {
      return null;
    }
    double p_value = benfordTestErgebnisse.getPValueNachFlaechenRatio();
    if (Double.isNaN(p_value) || Double.isInfinite(p_value)) {
      return null;
    }
    return p_value;
  }

  @Override
  public String getHeader() {
    return getMessage("stimmeingabe.auffaelligkeit.visualisiert.benford.test.p.value.flaechen.ratio.label");
  }

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