
package de.ivu.elect.sitzberechnung;

/**
 * Kandidatur = Kandidat, der für eine Gruppe in einem Gebiet kandidiert
 */
public interface Kandidatur extends SitzberechnungEntity {

  Gebiet getGebiet();

  Gruppe getGruppe();

  default boolean isInlaender() {
    return getKandidat() != null && getKandidat().isInlaender();
  }

  default boolean isEuBuerger() {
    return getKandidat() != null && getKandidat().isEuBuerger();
  }

  Kandidat getKandidat();

  default boolean isWaehlbar() {
    return getWaehlbarkeit().isWaehlbar();
  }

  Waehlbarkeit getWaehlbarkeit();

  default boolean isEinzelbewerber() {
    return getGruppe() != null && getGruppe().isEinzelbewerber();
  }

  boolean isMinderheitenvertreter(Minderheitengruppe minderheitengruppe);

  default boolean isDirektkandidatur() {
    return false;
  }

  /**
   * @return true, falls die Kandidatur manuell auf dem Stimmzettel hinzugefügt wurde
   */
  boolean isWaehlerBenannt();

  /**
   * @return true, falls dies die Dummy-Kandidatur "Sonstige" ist, die die Stimmen für alle (noch) nicht eineindeutig identifizierten, manuell auf dem Stimmzettel hinzugefügten Kandidaturen bekommt
   */
  boolean isWaehlerBenanntSonstige();

  @Override
  default String getKey() {
    String key = getKandidat().getKey() + "_" + getGebiet().getKey();

    if (getGruppe() != null) {
      key += "_" + getGruppe().getKey();
    }

    key += "_" + (isDirektkandidatur() ? "D" : "L");

    return key;
  }
}
