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

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

import java.util.Optional;

import de.ivu.elect.business.gruppe.entity.Gruppe;
import de.ivu.elect.business.gruppe.entity.NlPolitischeGruppe;
import de.ivu.elect.business.gruppe.entity.PolitischeGruppe;
import de.ivu.elect.jee.faces.Messages;
import de.ivu.elect.jee.presentation.dynamictable.ColumnType;

public class NlGruppeNameKennwortGeaendertColumn extends AbstractGruppeColumn<Gruppe> {

  private static final long serialVersionUID = 1L;

  public NlGruppeNameKennwortGeaendertColumn(Messages messages) {
    super("Gruppe-NameKennwort-Geaendert", messages, "gruppe.search.name.geaendert.column.header", ColumnType.BOOLEAN, gruppe -> {
      if (isNameGeaendert(gruppe)) {
        return true;
      }

      return null;
    });
  }

  @Override
  public String getTooltip(Gruppe gruppe) {
    return asNlPolitischeGruppe(gruppe).filter(NlPolitischeGruppe::isNameGeaendert).map(NlPolitischeGruppe::getNameInitial).orElse(super.getTooltip(gruppe));
  }

  private static boolean isNameGeaendert(Gruppe gruppe) {
    return asNlPolitischeGruppe(gruppe).map(NlPolitischeGruppe::isNameGeaendert).orElse(false);
  }

  private static Optional<NlPolitischeGruppe> asNlPolitischeGruppe(Gruppe gruppe) {
    if (gruppe != null && gruppe.isPolitischeGruppe()) {
      return Optional.of(new NlPolitischeGruppe(castTo(gruppe, PolitischeGruppe.class)));
    }

    return Optional.empty();
  }
}
