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

import javax.annotation.Nullable;

import de.ivu.elect.business.gruppeimgebiet.entity.GruppeImGebiet;
import de.ivu.elect.jee.faces.Messages;
import de.ivu.elect.jee.presentation.Icons;
import de.ivu.elect.jee.presentation.dynamictable.ColumnType;

// TODO überdenken
public class GruppeImGebietFixiertColumn extends AbstractGruppeImGebietColumn<GruppeImGebiet> {

  private static final long serialVersionUID = 1L;

  private final Icons icons;

  public GruppeImGebietFixiertColumn(Messages messages, Icons icons) {
    super(messages, "reihenfolge.fixiert.column", ColumnType.LONG, gruppeImGebiet -> {
      /*
       * Für bessere Übersichtlichkeit nur fixierte Positionen ausgeben und sonst leer lassen.
       */
      if (gruppeImGebiet != null && gruppeImGebiet.getVorgegebenePosition() != null) {
        return gruppeImGebiet.getVorgegebenePosition();
      }

      return null;
    });

    this.icons = icons;
  }

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

  @Override
  public boolean isIconRendered(GruppeImGebiet entity) {
    return getValue(entity) != null;
  }

  @Nullable
  @Override
  public String getIconTitle(GruppeImGebiet entity) {
    if (isRelativWeichtVonVorgegebenAb(entity)) {
      return getMessage("gruppe.im.gebiet.vorgegeben.weicht.von.relativer.position.ab", entity.getRelativePosition(), getValue(entity));
    }
    return super.getIconTitle(entity);
  }

  // ELECT-8902
  private boolean isRelativWeichtVonVorgegebenAb(GruppeImGebiet entity) {
    return entity.getRelativePosition() != null && getValue(entity) != null && !entity.getRelativePosition().equals(getValue(entity));
  }

  @Override
  public String getIcon(GruppeImGebiet entity) {
    if (isIconRendered(entity)) {
      if (isRelativWeichtVonVorgegebenAb(entity)) {
        return icons.getIconWarning();
      }
      return icons.getIconCheck();
    }

    return super.getIcon(entity);
  }
}
