
package de.ivu.elect.business.sitzberechnung.entity;

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

import javax.enterprise.inject.Specializes;

import de.ivu.elect.business.ergebniskonflikt.entity.ErgebnisKonfliktCustomDataFormatter;
import de.ivu.elect.business.gruppe.entity.Gruppe;
import de.ivu.elect.business.kandidatur.control.NlStimmzettelFormatter;
import de.ivu.elect.business.kandidatur.control.StimmzettelFormatter;
import de.ivu.elect.business.kandidatur.entity.Kandidatur;
import de.ivu.elect.business.wahlvorschlag.entity.Wahlvorschlag;

@Specializes // ELECTVAPP-1901
public class OsvLegacyKonfliktCustomDataFormatter extends ErgebnisKonfliktCustomDataFormatter {

  private static final long serialVersionUID = 1L;

  public OsvLegacyKonfliktCustomDataFormatter() {
    super();
  }

  @Override
  public String extractPolitischeGruppeDisplayName(Gruppe gruppe) {
    return defaultIfBlank(formatGruppeDisplayName(gruppe), super.extractPolitischeGruppeDisplayName(gruppe));
  }

  public static String formatGruppeDisplayName(Gruppe gruppe) {
    if (gruppe == null) {
      return "";
    }

    return gruppe.getKurzname();
  }

  @Override
  public String extractWahlvorschlagDisplayName(Wahlvorschlag wahlvorschlag) {
    return defaultIfBlank(formatListeDisplayName(wahlvorschlag), super.extractWahlvorschlagDisplayName(wahlvorschlag));
  }

  public static String formatListeDisplayName(Wahlvorschlag wahlvorschlag) {
    if (wahlvorschlag == null) {
      return "";
    }

    return wahlvorschlag.getKennwort();
  }

  @Override
  public String extractKandidaturDisplayName(Kandidatur kandidatur) {
    return defaultIfBlank(formatKandidaturDisplayName(getStimmzettelFormatter(), kandidatur), super.extractKandidaturDisplayName(kandidatur));
  }

  // ELECT-12785
  public static String formatKandidaturDisplayName(StimmzettelFormatter stimmzettelFormatter, Kandidatur kandidatur) {
    if (stimmzettelFormatter == null || kandidatur == null) {
      return "";
    }

    if (stimmzettelFormatter instanceof NlStimmzettelFormatter) {
      return ((NlStimmzettelFormatter) stimmzettelFormatter).formatKandidaturNamenInDokument(kandidatur);
    }

    return stimmzettelFormatter.formatKandidaturNamen(kandidatur);
  }
}
