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

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

import java.util.ArrayList;
import java.util.List;

import javax.enterprise.inject.Specializes;

import de.ivu.elect.business.gebietsbaum.control.NlWasGebietCustomDataErgebniseingangProtokoll;
import de.ivu.elect.business.stimmeingabe.entity.Ergebniseingang;
import de.ivu.elect.jee.presentation.dynamictable.ColumnEntry;

@Specializes
public class NlErgebniseingangColumnBuilder extends ErgebniseingangColumnBuilder {

  private static final long serialVersionUID = 1L;

  private AbstractErgebniseingangColumn<Ergebniseingang> ergebniseingangZeitstempelMitIconColumn;

  public NlErgebniseingangColumnBuilder() {
    super();
  }

  /*
   * ACHTUNG!!!
   *
   * Aufgrund der Super-Spezial-Anforderung in ELECTVAPP-387, dass gelöschte Ergebniseingänge weiterhin angezeigt werden müssen, enthält das Suchergebnis ggf. auch transiente Entitäten!!! Diese werden
   * aus CustomData-Einträgen "wiederhergestellt", besitzen zwar eine Pseudo-ID, KÖNNEN/DÜRFEN aber bspw. NICHT per DAO attached werden...
   */

  @Override
  protected void initColumns() {
    super.initColumns();

    ergebniseingangZeitstempelMitIconColumn = new NlErgebniseingangZeitstempelMitIconColumn(getMessages(), getIcons(),
        AbstractErgebniseingangColumn.createErgebniseingangZeitstempelColumn(getMessages()));

    ergebniseingangErgebniseingangsfehlerstatusColumn.setTooltipFct(ignored -> null); // ELECTVAPP-204
  }

  @Override // ELECT-10013
  protected List<ColumnEntry< ? super Ergebniseingang>> getColumnEntriesSorted() {
    List<ColumnEntry< ? super Ergebniseingang>> result = new ArrayList<>();

    result.add(ergebniseingangZeitstempelMitIconColumn);

    result.add(ergebniseingangErgebniseingabestufeColumn);

    result.add(ergebniseingangErgebniseingangsfehlerstatusColumn);

    result.add(ergebniseingangGebietNameColumn);
    result.add(ergebniseingangGebietNummerColumn);

    result.add(ergebniseingangErfasserColumn);

    result.add(ergebniseingangErgebniseingangsherkunftColumn);
    result.add(ergebniseingangFehlerWarnungColumn);

    return result;
  }

  @Override
  public String getStyleClass(Ergebniseingang ergebniseingang) {
    String result = super.getStyleClass(ergebniseingang);

    if (isErgebniseingangProtokolliert(ergebniseingang)) {
      result = trimToEmpty(result) + " ui-state-deleted";
    }

    return result;
  }

  private boolean isErgebniseingangProtokolliert(Ergebniseingang ergebniseingang) {
    return NlWasGebietCustomDataErgebniseingangProtokoll.isErgebniseingangProtokolliert(ergebniseingang);
  }
}
