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

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

import de.ivu.elect.business.veranstaltung.entity.Veranstaltung;
import de.ivu.elect.jee.faces.Messages;
import de.ivu.elect.jee.faces.UserLocale;
import de.ivu.elect.jee.presentation.Icons;
import de.ivu.elect.jee.presentation.dynamictable.ColumnType;

/**
 * ELECT-8422 WOS: Verwalten der Teilnehmeranzahl einer Schulung
 */
public class VeranstaltungTeilnehmerAnzahlColumn extends AbstractVeranstaltungColumn<Veranstaltung> {

  private static final long serialVersionUID = 1L;

  private final Icons icons;

  private final UserLocale userLocale;

  protected VeranstaltungTeilnehmerAnzahlColumn(Messages messages, UserLocale userLocale, Icons icons) {
    super("Veranstaltung-Teilnehmer-Anzahl", messages, "veranstaltung.search.column.teilnehmer.anzahl.label", ColumnType.STRING, null);

    this.userLocale = userLocale;

    this.icons = icons;
  }

  @Override
  public Object getValue(Veranstaltung veranstaltung) {
    Long anzahlMaximal = veranstaltung.getTeilnehmerAnzahlMax();
    Long anzahlIst = veranstaltung.getTeilnehmerAnzahl();

    if (anzahlMaximal == null) {
      return userLocale.formatNumber(anzahlIst);
    }

    return getMessage("veranstaltung.search.column.teilnehmer.anzahl.value", anzahlIst, anzahlMaximal);
  }

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

  @Override
  public boolean isIconRendered(Veranstaltung veranstaltung) {
    return veranstaltung.getTeilnehmerAnzahlMax() != null;
  }

  @Override
  public String getIcon(Veranstaltung veranstaltung) {
    if (veranstaltung.isUeberbelegt()) {
      return icons.getIconWarning();
    }

    if (veranstaltung.getTeilnehmerAnzahlMax() == null) {
      return icons.getIconCircleLeer();
    }

    return icons.getIconStatus(veranstaltung.getTeilnehmerAnzahlMax(), veranstaltung.getTeilnehmerAnzahl());
  }

  @Override
  public String getStyleClass() {
    return trimToEmpty(super.getStyleClass()) + " ui-dt-c-numeric";
  }
}
