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

import de.ivu.elect.business.person.entity.NlPersonendaten;
import de.ivu.elect.business.person.entity.NlPersonendatenProperties;
import de.ivu.elect.business.person.entity.PersonStatus;
import de.ivu.elect.business.person.entity.Personendaten;
import de.ivu.elect.business.person.entity.PersonendatenConstants;
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.person.table.AbstractPersonendatenColumn;
import de.ivu.elect.presentation.person.table.PersonendatenPersonStatusMitIconColumn;

// ELECT-11565
public class NlKandidaturPersonStatusColumn<E extends Personendaten> extends AbstractPersonendatenColumn<E> {

  private static final long serialVersionUID = 1L;

  private final Icons icons;

  private final PersonendatenPersonStatusMitIconColumn<E> personendatenPersonStatusMitIconColumn;

  public NlKandidaturPersonStatusColumn(Messages messages, Icons icons) {
    super("Nl-Kandidatur-Person-Status-Column", messages, PersonendatenConstants.MESSAGE_KEY_PERSON_STATUS_EINZAHL, ColumnType.STRING, kandidatur -> "");

    this.icons = icons;

    this.personendatenPersonStatusMitIconColumn = new PersonendatenPersonStatusMitIconColumn<>(messages, icons);
  }

  @Override
  public Object getValue(E kandidatur) {
    PersonStatus personStatus = getPersonStatus(kandidatur);

    if (personStatus != null) {
      return getMessage(personStatus);
    }

    return personendatenPersonStatusMitIconColumn.getValue(kandidatur);
  }

  @Override
  public boolean isIconPresent() {
    return personendatenPersonStatusMitIconColumn.isIconPresent();
  }

  @Override
  public boolean isIconRendered(E kandidatur) {
    return getPersonStatus(kandidatur) != null || personendatenPersonStatusMitIconColumn.isIconRendered(kandidatur);
  }

  @Override
  public String getIcon(E kandidatur) {
    PersonStatus personStatus = getPersonStatus(kandidatur);

    if (personStatus != null) {
      return personStatus.getIcon(icons);
    }

    return personendatenPersonStatusMitIconColumn.getIcon(kandidatur);
  }

  @Override
  public String getIconStyle(E kandidatur) {
    return personendatenPersonStatusMitIconColumn.getIconStyle(kandidatur);
  }

  @Override
  public String getIconStyleClass(E kandidatur) {
    return personendatenPersonStatusMitIconColumn.getIconStyleClass(kandidatur);
  }

  @Override
  public String getIconTitle(E kandidatur) {
    return personendatenPersonStatusMitIconColumn.getIconTitle(kandidatur);
  }

  @Override
  public String getTooltip(E kandidatur) {
    if (kandidatur != null) {
      return new NlPersonendatenProperties(kandidatur).getPersonStatusProperty().getTooltip();
    }

    return super.getTooltip(kandidatur);
  }

  private PersonStatus getPersonStatus(E kandidatur) {
    if (kandidatur == null) {
      return null;
    }

    return new NlPersonendaten(kandidatur).getPersonStatus();
  }
}
