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

import org.apache.commons.lang3.StringUtils;

import de.ivu.elect.util.TrimUtil;

public enum GruppeSchluesselNormalisierungstyp {

  DEAKTIVIERT {
    @Override
    protected String normalisiereInternal(String schluessel) {
      return schluessel.trim();
    }
  },
  FUEHRENDE_NULLEN_ENTFERNEN {
    @Override
    protected String normalisiereInternal(String schluessel) {
      return TrimUtil.removeLeadingZeros(DEAKTIVIERT.normalisiereInternal(schluessel)).trim();
    }
  },
  ZWEISTELLIG_FUEHRNDE_NULLEN{
    @Override
    protected String normalisiereInternal(String schluessel) {
      return StringUtils.leftPad(DEAKTIVIERT.normalisiereInternal(schluessel), 2, "0");
    }
  },
  DREISTELLIG_FUEHRNDE_NULLEN {
    @Override
    protected String normalisiereInternal(String schluessel) {
      return StringUtils.leftPad(DEAKTIVIERT.normalisiereInternal(schluessel), 3, "0");
    }
  },
  VIERSTELLIG_FUEHRNDE_NULLEN {
    @Override
    protected String normalisiereInternal(String schluessel) {
      return StringUtils.leftPad(DEAKTIVIERT.normalisiereInternal(schluessel), 4, "0");
    }
  },
  FUENFSTELLIG_FUEHRNDE_NULLEN {
    @Override
    protected String normalisiereInternal(String schluessel) {
      return StringUtils.leftPad(DEAKTIVIERT.normalisiereInternal(schluessel), 5, "0");
    }
  },

  ;

  public String normalisiere(String schluessel) {
    if (schluessel == null) {
      return null;
    }
    if (StringUtils.isBlank(schluessel)) {
      return "";
    }
    return normalisiereInternal(schluessel);
  }

  protected abstract String normalisiereInternal(String schluessel);
}
