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

import java.util.List;
import java.util.Objects;

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

public class StimmbezirkNummerDurchnummerierer {

  public static final int ERSTE_NUMMER = 1;

  public StimmbezirkNummerDurchnummerierer() {
    super();
  }

  public String getErsteFreieNummer(Gebiet uebergeordnetesGebiet, List<Gebiet> durchnummerierteGebiete) {
    String ersteFreieNummer = uebergeordnetesGebiet.getNummer() + formatiereNummer(ERSTE_NUMMER);

    while (istNummerVergeben(durchnummerierteGebiete, ersteFreieNummer)) {
      ersteFreieNummer = increaseNummer(ersteFreieNummer);
    }

    return ersteFreieNummer;
  }

  public String formatiereNummer(long nummer) {
    return String.format("%02d", nummer);
  }

  private boolean istNummerVergeben(List<Gebiet> durchnummerierteGebiete, String nummer) {
    for (Gebiet gebiet : durchnummerierteGebiete) {
      if (Objects.equals(gebiet.getNummer(), nummer)) {
        return true;
      }
    }

    return false;
  }

  private String increaseNummer(String ersteFreieNummer) {
    Long nummer = Long.valueOf(ersteFreieNummer);
    nummer++;

    return nummer.toString();
  }
}
