package de.ivu.elect.was.sitzberechnung.control;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.enterprise.inject.Instance;
import javax.enterprise.inject.Specializes;
import javax.inject.Inject;

import de.ivu.elect.business.sitzberechnung.control.OsvSitzberechnungsalgorithmusFinder;
import de.ivu.elect.business.wahl.entity.WahlartSitzberechnungsalgorithmus;
import de.ivu.wahl.wus.electioncategory.ElectionSubcategory;

@Specializes
public class LegacyOsvSitzberechnungsalgorithmusFinder extends OsvSitzberechnungsalgorithmusFinder {

  private static final Pattern PATTERN = Pattern.compile("_", Pattern.LITERAL);

  @Inject
  private transient Instance<OsvLegacySitzberechnungsalgorithmusMarker> markers;

  @Override
  public WahlartSitzberechnungsalgorithmus findeFuerWahlart(String electionSubcategoryEml) {
    ElectionSubcategory electionSubcategory = mappe(electionSubcategoryEml);

    for (OsvLegacySitzberechnungsalgorithmusMarker marker : markers) {
      if (marker.getOSVLegacySitzberechnungWahlart().getElectionSubcategory().equals(electionSubcategory)) {
        return marker.getSitzberechnungsalgorithmusEnum();
      }
    }

    return super.findeFuerWahlart(electionSubcategoryEml);
  }

  ElectionSubcategory mappe(String electionSubcategoryEml) {
    return ElectionSubcategory.valueOf(PATTERN.matcher(electionSubcategoryEml).replaceAll(Matcher.quoteReplacement("")));
  }
}
