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

import static org.apache.commons.lang3.StringUtils.isNotBlank;

import de.ivu.elect.business.kandidatur.entity.Kandidatur;
import de.ivu.elect.business.kandidatur.entity.KandidaturConstants;
import de.ivu.elect.business.stimmzettel.entity.EntityAufStimmzettelDaten;
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.wahl.CurrentWahlZulassungspruefungExtended;

public class KandidaturStatusMitIconColumn<E extends Kandidatur> extends AbstractKandidaturColumn<E> implements KandidaturZulassungspruefungColumn<E> {

  private static final long serialVersionUID = 1L;

  private final Icons icons;

  private final EntityAufStimmzettelDaten entityAufStimmzettelDaten;

  private final CurrentWahlZulassungspruefungExtended currentWahlZulassungspruefung;

  public KandidaturStatusMitIconColumn(Messages messages, Icons icons, EntityAufStimmzettelDaten entityAufStimmzettelDaten, CurrentWahlZulassungspruefungExtended currentWahlZulassungspruefung) {
    super("Kandidatur-Status-Mit-Icon", messages, KandidaturConstants.MESSAGE_KEY_KANDIDATUR_STATUS_EINZAHL, ColumnType.ENUM, Kandidatur::getKandidaturStatus);

    this.icons = icons;

    this.entityAufStimmzettelDaten = entityAufStimmzettelDaten;

    this.currentWahlZulassungspruefung = currentWahlZulassungspruefung;
  }

  @Override
  public boolean isRendered() {
    return super.isRendered() && isRendered(getCurrentWahlZulassungspruefung());
  }

  @Override
  public boolean isRendered(CurrentWahlZulassungspruefungExtended currentWahlZulassungspruefung) {
    return currentWahlZulassungspruefung.isZulassungBearbeitbar(); // WASDE-1356
  }

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

  @Override
  public boolean isIconRendered(E kandidatur) {
    return true;
  }

  @Override
  public String getIcon(E kandidatur) {
    return kandidatur.getKandidaturStatus().getIcon(icons);
  }

  @Override
  public String getTooltip(E kandidatur) {
    if (kandidatur != null && isNotBlank(kandidatur.getBemerkung())) {
      return kandidatur.getBemerkung();
    }

    return super.getTooltip(kandidatur);
  }

  private EntityAufStimmzettelDaten getEntityAufStimmzettelDaten() {
    return entityAufStimmzettelDaten;
  }

  private CurrentWahlZulassungspruefungExtended getCurrentWahlZulassungspruefung() {
    return currentWahlZulassungspruefung;
  }
}
