
package de.ivu.elect.business.wahlvorschlag.control;

import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;

import de.ivu.elect.business.wahlvorschlag.entity.PrivilegierungsTyp;
import de.ivu.elect.business.wahlvorschlag.entity.Wahlvorschlag;

public class WahlvorschlagByPrivilegierungsTypComparator implements Comparator<Wahlvorschlag> {

  private Map<PrivilegierungsTyp, Integer> typeToReihenfolgeMap;

  @Override
  public int compare(Wahlvorschlag o1, Wahlvorschlag o2) {

    if (o1 == null) {
      if (o2 == null) {
        return 0;
      } else {
        return 1;
      }
    }
    if (o2 == null) {
      return -1;
    }

    PrivilegierungsTyp valueOne = o1.getPrivilegierungsTyp();
    PrivilegierungsTyp valueAnother = o2.getPrivilegierungsTyp();

    if (valueOne == null) {
      if (valueAnother == null) {
        return 0;
      } else {
        return 1;
      }
    }
    if (valueAnother == null) {
      return -1;
    }

    return getTypeToReihenfolgeMap().get(valueOne).compareTo(getTypeToReihenfolgeMap().get(valueAnother));
  }

  Map<PrivilegierungsTyp, Integer> getTypeToReihenfolgeMap() {
    if (typeToReihenfolgeMap == null) {
      typeToReihenfolgeMap = new HashMap<>();
      typeToReihenfolgeMap.put(PrivilegierungsTyp.PRIVILEGIERT, 1);
      typeToReihenfolgeMap.put(PrivilegierungsTyp.ALTER_WAHLVORSCHLAGTRAEGER, 2);
      typeToReihenfolgeMap.put(PrivilegierungsTyp.NEUER_WAHLVORSCHLAGTRAEGER, 3);
      typeToReihenfolgeMap.put(PrivilegierungsTyp.UNBEKANNT, 4);
    }
    return typeToReihenfolgeMap;
  }
}
