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

import de.ivu.elect.business.security.Customer;
import de.ivu.elect.business.wahl.entity.NlWahlart;
import de.ivu.elect.business.wahl.entity.Wahl;
import de.ivu.elect.jee.faces.Messages;

public enum NlGebietKorrekturenStimmeingabenStatus {

  UNBEKANNT,

  KEINE_PRUEFUNG_ERFORDERLICH {

    @Override
    public boolean isPruefungNichtErforderlich() {
      return true;
    }

    @Override
    public boolean isUebergangZulaessig(NlGebietKorrekturenStimmeingabenStatus korrekturenStimmeingabenStatus) {
      return korrekturenStimmeingabenStatus != null && korrekturenStimmeingabenStatus.isPruefungErforderlich();
    }
  },

  PRUEFUNG_ERFORDERLICH {

    @Override
    public boolean isPruefungErforderlich() {
      return true;
    }

    @Override
    public boolean isUebergangZulaessig(NlGebietKorrekturenStimmeingabenStatus korrekturenStimmeingabenStatus) {
      return korrekturenStimmeingabenStatus != null && (korrekturenStimmeingabenStatus.isPruefungNichtErforderlich() || korrekturenStimmeingabenStatus.isPruefungErfolgt());
    }
  },

  NACH_PRUEFUNG_KORRIGERT {

    @Override
    public boolean isPruefungErfolgt() {
      return true;
    }

    @Override
    public boolean isUebergangZulaessig(NlGebietKorrekturenStimmeingabenStatus korrekturenStimmeingabenStatus) {
      return korrekturenStimmeingabenStatus != null && (korrekturenStimmeingabenStatus.isPruefungNichtErforderlich() || korrekturenStimmeingabenStatus.isPruefungErforderlich());
    }
  },

  NACH_PRUEFUNG_UNVERAENDERT {

    @Override
    public boolean isPruefungErfolgt() {
      return true;
    }

    @Override
    public boolean isUebergangZulaessig(NlGebietKorrekturenStimmeingabenStatus korrekturenStimmeingabenStatus) {
      return korrekturenStimmeingabenStatus != null && (korrekturenStimmeingabenStatus.isPruefungNichtErforderlich() || korrekturenStimmeingabenStatus.isPruefungErforderlich());
    }
  },

  ;

  NlGebietKorrekturenStimmeingabenStatus() {
  }

  public boolean isUebergangZulaessig(NlGebietKorrekturenStimmeingabenStatus korrekturenStimmeingabenStatus) {
    return false;
  }

  public boolean isPruefungNichtErforderlich() {
    return false;
  }

  public boolean isPruefungErforderlich() {
    return false;
  }

  public boolean isPruefungErfolgt() {
    return false;
  }

  public String getIconGebietsbaum(Messages messages) {
    return messages.getMessageForMessageKey("NlGebietKorrekturenStimmeingabenStatus." + name() + ".gebietsbaum.icon");
  }

  public static boolean isRelevant(Gebiet gebiet, Customer customer) {
    return gebiet != null && gebiet.isErfassungsgebiet() && isRelevant(gebiet.getWahl(), customer);
  }

  public static boolean isRelevant(Wahl wahl, Customer customer) {
    if (!NlWahlart.EERSTE_KAMER.equalsWahlart(wahl)) { // ELECTVAPP-2239
      return NlWahlart.isWasNBSB(wahl, customer) || NlWahlart.isWasNBSBC(wahl, customer) // ELECT-16530, ELECT-16707
          || NlWahlart.isWasHSBC(wahl, customer) //
          || NlWahlart.isWasCSB(wahl, customer) //
      ;
    }

    return false;
  }
}
