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

import de.ivu.elect.business.kandidatur.entity.KandidaturStatus;
import de.ivu.elect.business.person.entity.PersonStatus;
import de.ivu.elect.business.person.entity.PersonenregisterAbgleichStatus;
import de.ivu.elect.business.wahlvorschlag.entity.WahlvorschlagStatus;

public enum WahlvorschlagImporterZulassungsVerhalten {

  KEINE_WAHLVORSCHLAEGE_ZULASSEN(WahlvorschlagStatus.OFFEN, PersonStatus.UNGEPRUEFT, KandidaturStatus.OFFEN,
      PersonStatus.UNGEPRUEFT, KandidaturStatus.OFFEN),

  DIREKTKANDIDATEN_ZULASSEN(WahlvorschlagStatus.OFFEN, PersonStatus.UNGEPRUEFT, KandidaturStatus.OFFEN,
      PersonStatus.NICHT_ZU_PRUEFEN, KandidaturStatus.ZUGELASSEN),

  LISTEN_UND_LISTENKANDIDATUREN_ZULASSEN(WahlvorschlagStatus.ZUGELASSEN, PersonStatus.NICHT_ZU_PRUEFEN,
      KandidaturStatus.ZUGELASSEN, PersonStatus.UNGEPRUEFT, KandidaturStatus.OFFEN),

  ALLE_WAHLVORSCHLAEGE_ZULASSEN(WahlvorschlagStatus.ZUGELASSEN, PersonStatus.NICHT_ZU_PRUEFEN,
      KandidaturStatus.ZUGELASSEN, PersonStatus.NICHT_ZU_PRUEFEN, KandidaturStatus.ZUGELASSEN),

  ZULASSUNGSSTATUS_IMPORTIEREN(WahlvorschlagStatus.OFFEN, PersonStatus.UNGEPRUEFT, KandidaturStatus.OFFEN,
          PersonStatus.UNGEPRUEFT, KandidaturStatus.OFFEN) {
    @Override
    public boolean isZulassungsstatusImportieren() {
      return true;
    }
  },;

  private final WahlvorschlagStatus listeWahlvorschlagStatus;

  private final PersonStatus listenkandidaturPersonStatus;

  private final PersonenregisterAbgleichStatus listenkandidaturPersonenregisterAbgleichStatus;

  private final KandidaturStatus listenkandidaturKandidaturStatus;

  private final PersonStatus direktkandidaturPersonStatus;

  private final PersonenregisterAbgleichStatus direktkandidaturPersonenregisterAbgleichStatus;

  private final KandidaturStatus direktkandidaturKandidaturStatus;

  WahlvorschlagImporterZulassungsVerhalten(WahlvorschlagStatus listeWahlvorschlagStatus,
                                           PersonStatus listenkandidaturPersonStatus, KandidaturStatus listenkandidaturKandidaturStatus,
                                           PersonStatus direktkandidaturPersonStatus, KandidaturStatus direktkandidaturKandidaturStatus) {
    this.listeWahlvorschlagStatus = listeWahlvorschlagStatus;

    this.listenkandidaturPersonStatus = listenkandidaturPersonStatus;
    this.listenkandidaturPersonenregisterAbgleichStatus = getPersonenregisterAbgleichStatus(listenkandidaturPersonStatus);
    this.listenkandidaturKandidaturStatus = listenkandidaturKandidaturStatus;

    this.direktkandidaturPersonStatus = direktkandidaturPersonStatus;
    this.direktkandidaturPersonenregisterAbgleichStatus = getPersonenregisterAbgleichStatus(direktkandidaturPersonStatus);
    this.direktkandidaturKandidaturStatus = direktkandidaturKandidaturStatus;
  }

  public WahlvorschlagStatus getListeWahlvorschlagStatus() {
    return listeWahlvorschlagStatus;
  }

  public PersonStatus getListenkandidaturPersonStatus() {
    return listenkandidaturPersonStatus;
  }

  public PersonenregisterAbgleichStatus getListenkandidaturPersonenregisterAbgleichStatus() {
    return listenkandidaturPersonenregisterAbgleichStatus;
  }

  public KandidaturStatus getListenkandidaturKandidaturStatus() {
    return listenkandidaturKandidaturStatus;
  }

  public PersonStatus getDirektkandidaturPersonStatus() {
    return direktkandidaturPersonStatus;
  }

  public PersonenregisterAbgleichStatus getDirektkandidaturPersonenregisterAbgleichStatus() {
    return direktkandidaturPersonenregisterAbgleichStatus;
  }

  public KandidaturStatus getDirektkandidaturKandidaturStatus() {
    return direktkandidaturKandidaturStatus;
  }

  private static PersonenregisterAbgleichStatus getPersonenregisterAbgleichStatus(PersonStatus personStatus) {
    if (personStatus.isNichtZuPruefen()) {
      return PersonenregisterAbgleichStatus.KEIN_ABGLEICH_NOTWENDIG;
    }

    return PersonenregisterAbgleichStatus.ABGLEICH_NOTWENDIG;
  }

  public boolean isZulassungsstatusImportieren() {
    return false;
  }
}
