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

/**
 *  on 25.06.2015.
 */
public enum GebietsartBezirksart {

  KEINE{
    @Override
    public boolean isKeine() {
      return true;
    }

    @Override
    public Gebiet selectBezirk(BezirkSupplier supplier) {
      throw new IllegalArgumentException("Kein Bezirk für Bezirksart " + this);
    }

  },

  STIMMBEZIRK{
    @Override
    public boolean isStimmbezirk() {
      return true;
    }

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

    @Override
    public Gebiet selectBezirk(BezirkSupplier supplier) {
      return supplier.getStimmbezirk();
    }
  },
  BRIEFWAHLBEZIRK{
    @Override
    public boolean isBriefwahlbezirk() {
      return true;
    }

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

    @Override
    public Gebiet selectBezirk(BezirkSupplier supplier) {
      return supplier.getBriefwahlbezirk();
    }

  },
  RESERVEBEZIRK{
    @Override
    public boolean isReservebezirk() {
      return true;
    }

    @Override
    public Gebiet selectBezirk(BezirkSupplier supplier) {
      return supplier.getReservebezirk();
    }


  };

  public boolean isBezirk() {
    return !isKeine();
  }

  public boolean isBriefwahlbezirk() {
    return false;
  }

  public boolean isReservebezirk(){
    return false;
  }

  public boolean isStimmbezirk(){
    return false;
  }

  public boolean isKeine() {
    return false;
  }

  public boolean isErfassungsgebiet() {
    return false;
  }

  public abstract Gebiet selectBezirk(BezirkSupplier supplier);
}
