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

import java.io.Serializable;
import java.util.Comparator;

import de.ivu.elect.business.gruppe.control.GruppeByKurznameComparator;
import de.ivu.elect.business.gruppe.entity.Gruppe;
import de.ivu.elect.business.person.control.EntityMitPersonendatenByNamenComparator;
import de.ivu.elect.business.wahlausschuss.entity.Wahlausschussmitglied;

public class WahlausschussmitgliedDefaultComparator implements Comparator<Wahlausschussmitglied>, Serializable {

  private static final long serialVersionUID = 1L;

  private static final Comparator<Gruppe> GRUPPE_DEFAULT_COMPARATOR = GruppeByKurznameComparator.ASCENDING;

  private static final Comparator<Wahlausschussmitglied> PERSONENDATEN_DEFAULT_COMPARATOR = new EntityMitPersonendatenByNamenComparator<>();

  public WahlausschussmitgliedDefaultComparator() {
    super();
  }

  @Override
  public int compare(Wahlausschussmitglied one, Wahlausschussmitglied another) {
    int result = 0;

    if (result == 0) {
      result = one.getGebiet().getPosition().compareTo(another.getGebiet().getPosition());
    }

    if (result == 0) {
      result = one.getWahlausschussrolle().compareTo(another.getWahlausschussrolle());
    }

    if (result == 0) {
      result = GRUPPE_DEFAULT_COMPARATOR.compare(one.getPolitischeGruppe(), another.getPolitischeGruppe());
    }

    if (result == 0) {
      if (one.isVertrittJemanden() && !another.isVertrittJemanden()) {
        result = 1;
      }
      if (!one.isVertrittJemanden() && another.isVertrittJemanden()) {
        result = -1;
      }
    }

    if (result == 0) {
      result = PERSONENDATEN_DEFAULT_COMPARATOR.compare(one, another);
    }

    return result;
  }
}
