
package de.ivu.elect.presentation.gebietsbaum;

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

import javax.enterprise.inject.Specializes;

import de.ivu.elect.business.gebietsbaum.entity.Gebiet;
import de.ivu.elect.business.gebietsbaum.entity.NlGebietCustomData;
import de.ivu.elect.business.gebietsbaum.entity.NlGebietsart;

@Specializes
public class NlGebietNummerFormatter extends GebietNummerFormatter {

  private static final long serialVersionUID = 1L;

  public NlGebietNummerFormatter() {
    super();
  }

  @Override
  public String getDarstellung(Gebiet gebiet) {
    if (gebiet != null && gebiet.getCustomData(NlGebietCustomData.class).isRomanNumerals()) {
      try {
        return gebiet.getName() + " " + toRoman(gebiet);
      } catch (Exception ignored) {
      }
    }

    return super.getDarstellung(gebiet);
  }

  private String toRoman(Gebiet gebiet) {
    return Roman.toRoman(Long.parseLong(gebiet.getNummer()));
  }

  @Override
  public String getNummer(Gebiet gebiet) {
    if (gebiet == null) {
      return super.getNummer(gebiet);
    }

    try {
      if (gebiet.getCustomData(NlGebietCustomData.class).isRomanNumerals()) {
        return toRoman(gebiet);
      }
    } catch (Exception ignored) {
    }

    Integer anzahlStellen = NlGebietsart.from(gebiet).getAnzahlStellenGebietsnummer();

    if (anzahlStellen != null) {
      return leftPad(gebiet.getNummer(), anzahlStellen, "0");
    }

    return super.getNummer(gebiet);
  }
}
