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

import static de.ivu.elect.jee.entity.EntityUtil.castTo;

import de.ivu.elect.business.kandidatur.entity.Kandidatur;
import de.ivu.elect.business.kandidatur.entity.Listenkandidatur;
import de.ivu.elect.jee.faces.Messages;
import de.ivu.elect.jee.presentation.dynamictable.ColumnType;
import de.ivu.elect.presentation.person.PersonendatenArtFormatter;
import de.ivu.elect.presentation.table.DefaultColumnEntry;

public class ListenkandidaturErsatzkandidaturColumn extends DefaultColumnEntry<Kandidatur> {

  private static final long serialVersionUID = 1L;

  public ListenkandidaturErsatzkandidaturColumn(Messages messages) {
    super("Listenkandidatur-Ersatzkandidatur", messages, "listenkandidatur.search.is.ersatzkandidatur.column.header", ColumnType.BOOLEAN, kandidatur -> {
      if (isErsatzkandidatur(kandidatur) || isListenkandidaturMarkiertAlsErsatzkandidatur(kandidatur)) {
        return true;
      }

      return null; // ELECT-8393, kein Icon anzeigen...
    });
  }

  @Override
  public String getTooltip(Kandidatur kandidatur) {
    if (isErsatzkandidatur(kandidatur)) {
      return getMessage(PersonendatenArtFormatter.MSG_KEY_PREFIX + kandidatur.getDiscriminator());
    }

    if (isListenkandidaturMarkiertAlsErsatzkandidatur(kandidatur)) {
      return getMessage(PersonendatenArtFormatter.MSG_KEY_PREFIX + kandidatur.getDiscriminator() + "." + castTo(kandidatur, Listenkandidatur.class).getListenkandidaturArt().name());
    }

    return super.getTooltip(kandidatur);
  }

  private static boolean isErsatzkandidatur(Kandidatur kandidatur) {
    return kandidatur != null && kandidatur.isErsatzkandidatur();
  }

  private static boolean isListenkandidaturMarkiertAlsErsatzkandidatur(Kandidatur kandidatur) {
    return kandidatur != null && kandidatur.isListenkandidatur() && castTo(kandidatur, Listenkandidatur.class).isListenkandidaturMarkiertAlsErsatzkandidatur();
  }
}
