
package de.ivu.elect.business.wahl.boundary;

import java.util.Collection;
import java.util.Collections;

import de.ivu.elect.business.gebietsbaum.boundary.GebietsartTemplate;
import de.ivu.elect.business.wahl.entity.ErgebnisartUmschaltbar;
import de.ivu.elect.business.wahl.entity.UmgangAWerte;
import de.ivu.elect.business.wahl.entity.UmgangBWerte;
import de.ivu.elect.business.wahl.entity.UmgangGueltigeWerte;
import de.ivu.elect.business.wahl.entity.WahlErgebniseingangUebernahmeArt;
import de.ivu.elect.business.wahl.entity.WahlErgebniseingangUebernahmeManuell;
import de.ivu.elect.business.wahl.entity.Wahlart;
import de.ivu.elect.business.wahl.entity.WahlartAnzahlErsatzkandidaturenArt;
import de.ivu.elect.business.wahl.entity.WahlartDokumentvorlagen;
import de.ivu.elect.business.wahl.entity.WahlartStimmenProWaehlerArt;
import de.ivu.elect.business.wahl.entity.WahlartSystemGebietsebene;
import de.ivu.elect.business.wahl.entity.WahlberechtigungImAusland;
import de.ivu.elect.business.wahl.entity.Zulassungspruefung;

/**
 * @deprecated NICHT FÜR LOGIK verwenden, Informationen sollen aus der Entität Wahlart kommen(!)
 */
@Deprecated
public interface WahlartCreateTemplate extends WahlartTemplate {

  boolean isGruppenvereinigungenErlaubt();

  boolean isLeereListenErlaubt();

  boolean isListenverbindungenErlaubt(); // ELECT-8816

  default WahlartAnzahlErsatzkandidaturenArt getMaxAnzahlErsatzkandidaturenArt() { // ELECT-14034
    return WahlartAnzahlErsatzkandidaturenArt.FIX;
  }

  Long getMaxAnzahlErsatzkandidaturen();

  Long getMaxAnzahlNennungen();

  String getFarbe();

  default UmgangAWerte getUmgangAPruefkennzeichenVorlaeufig() {
    return UmgangAWerte.NICHT_VORHANDEN;
  }

  default UmgangAWerte getUmgangAPruefkennzeichenEndgueltig() {
    return UmgangAWerte.NICHT_VORHANDEN;
  }

  UmgangAWerte getUmgangAOhneWahlscheinVorlaeufig();

  UmgangAWerte getUmgangAOhneWahlscheinEndgueltig();

  UmgangAWerte getUmgangAMitWahlscheinVorlaeufig();

  UmgangAWerte getUmgangAMitWahlscheinEndgueltig();

  UmgangAWerte getUmgangANichtImWaehlerverzeichnisVorlaeufig();

  UmgangAWerte getUmgangANichtImWaehlerverzeichnisEndgueltig();

  UmgangAWerte getUmgangAGesamtVorlaeufig();

  UmgangAWerte getUmgangAGesamtEndgueltig();

  UmgangBWerte getUmgangBOhneWahlscheinVorlaeufig();

  UmgangBWerte getUmgangBOhneWahlscheinEndgueltig();

  UmgangBWerte getUmgangBMitWahlscheinVorlaeufig();

  UmgangBWerte getUmgangBMitWahlscheinEndgueltig();

  default UmgangBWerte getUmgangBGesamtVorlaeufig() {
    return UmgangBWerte.ERFASSEN;
  }

  default UmgangBWerte getUmgangBGesamtEndgueltig() {
    return UmgangBWerte.ERFASSEN;
  }

  default UmgangGueltigeWerte getUmgangGueltigeVorlaeufig() {
    return UmgangGueltigeWerte.ERFASSEN_ALS_STIMMEN;
  }

  default UmgangGueltigeWerte getUmgangGueltigeEndgueltig() {
    return UmgangGueltigeWerte.ERFASSEN_ALS_STIMMEN;
  }

  default UmgangGueltigeWerte getUmgangUngueltigeVorlaeufig() {
    return UmgangGueltigeWerte.ERFASSEN_ALS_STIMMEN;
  }

  default UmgangGueltigeWerte getUmgangUngueltigeEndgueltig() {
    return UmgangGueltigeWerte.ERFASSEN_ALS_STIMMEN;
  }

  default Zulassungspruefung getZulassungspruefung() {
    return Zulassungspruefung.AKTIVIERT;
  }

  boolean isWahlgebietFor(GebietsartTemplate customGebietsartTemplate);

  boolean isDirektwahlgebietFor(GebietsartTemplate customGebietsartTemplate);

  boolean isListenwahlgebietFor(GebietsartTemplate customGebietsartTemplate);

  boolean isReferendumgebietFor(GebietsartTemplate customGebietsartTemplate);

  boolean isErgebnisRelevantFor(GebietsartTemplate customGebietsartTemplate);

  boolean isListenkandidatenWaehlbarFor(GebietsartTemplate gebietsartTemplate);

  boolean isErfassungsgebietFor(GebietsartTemplate gebietsartTemplate);

  boolean isGueltigeWahlart(GebietsartTemplate customGebietsartTemplate);

  WahlartStimmenProWaehlerArt getAnzahlStimmenProWaehlerArt();

  Long getAnzahlStimmenProWaehler();

  boolean isGruppenreihenfolgeVorgegeben();

  default Collection<WahlartSystemGebietsebene> getSystemGebietsebenen() {
    return Collections.singleton(WahlartSystemGebietsebene.OHNE);
  }

  default WahlartDokumentvorlagen getDokumentvorlagen() {
    return WahlartDokumentvorlagen.KEINE;
  }

  default WahlberechtigungImAusland getWahlberechtigungImAusland() {
    return WahlberechtigungImAusland.UNBEKANNT;
  }

  default String getWahlbezeichnungLang() {
    return null;
  }

  default String getWahlausschussbezeichnung() {
    return null;
  }

  String getZuWaehlendesGremium();

  default ErgebnisartUmschaltbar getErgebnisartUmschaltbar() {
    return new Wahlart().getErgebnisartUmschaltbar();
  }

  default WahlErgebniseingangUebernahmeArt getErfassungUebernahmeArt() {
    return new Wahlart().getErfassungUebernahmeArt();
  }

  default WahlErgebniseingangUebernahmeManuell getErfassungUebernahmeManuell() {
    return new Wahlart().getErfassungUebernahmeManuell();
  }
}
