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

import de.ivu.elect.business.gruppe.entity.PolitischeGruppe;

import java.io.Serializable;
import java.util.Set;

import static org.apache.commons.lang3.StringUtils.isNotBlank;

public class PolitischeGruppeKurznameBerechner implements Serializable {

  private static final String EINZELBEWERBER_KURZNAME_PREFIX = "EB";

  private static final int MAX_SUFFIX = 999;

  public String berechneKurznameFuerEinzelbewerber(PolitischeGruppe politischeGruppe, String familienname,
                                                   String vornamen, String gebietNummer, Set<String> vergebeneKurznamen) {

    String neuerKurzname = EINZELBEWERBER_KURZNAME_PREFIX;

    if (isNotBlank(familienname)) {
      neuerKurzname = neuerKurzname.concat(":").concat(familienname); // Familienname anhängen
      if (vergebeneKurznamen.contains(neuerKurzname)) {
        if (isNotBlank(vornamen)) {
          neuerKurzname = neuerKurzname.concat(vornamen.substring(0, 1)); // Ersten Buchstaben des Vornamens anhängen
          if (vergebeneKurznamen.contains(neuerKurzname)) {
            neuerKurzname = neuerKurzname.concat(vornamen.replaceAll("\\s", "").substring(1)); // Rest des Vornamens anhängen
          }
        }
        // FRAGE: Ist die Gebietnummer für alle Kunden sinnvoll?
        //        if (vergebeneKurznamen.contains(neuerKurzname) && isNotBlank(gebietNummer)) {
        //          neuerKurzname = neuerKurzname.concat(gebietNummer); // Gebietnummer anhängen
        //        }
      }
    }

    // Wenn immer noch identisch, dann Zahl anhängen...
    if (vergebeneKurznamen.contains(neuerKurzname)) {
      int suffix = 2;
      while (vergebeneKurznamen.contains(neuerKurzname + suffix) && suffix < MAX_SUFFIX) {
        suffix++;
      }
      neuerKurzname += suffix;
    }

    return neuerKurzname;
  }
}
