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

import de.ivu.elect.business.system.entity.SystemGebietsebene;

public enum WahlartSystemGebietsebene {

  /**
   * WERTE NICHT LÖSCHEN ODER UMBENNEN, WERDEN IN EXPORTEN VERWENDET(!)
   */

  OHNE {
    @Override
    protected boolean akzeptiertInternal(SystemGebietsebene systemGebietsebene) {
      return true;
    }
  },

  BUND {
    @Override
    protected boolean akzeptiertInternal(SystemGebietsebene systemGebietsebene) {
      return SystemGebietsebene.BUND.equals(systemGebietsebene);
    }
  },

  BUNDESLAND {
    @Override
    protected boolean akzeptiertInternal(SystemGebietsebene systemGebietsebene) {
      return SystemGebietsebene.BUNDESLAND.equals(systemGebietsebene);
    }
  },

  LANDKREIS {
    @Override
    protected boolean akzeptiertInternal(SystemGebietsebene systemGebietsebene) {
      return SystemGebietsebene.LANDKREIS.equals(systemGebietsebene);
    }
  },

  VERBANDSGEMEINDE {
    @Override
    protected boolean akzeptiertInternal(SystemGebietsebene systemGebietsebene) {
      return SystemGebietsebene.VERBANDSGEMEINDE.equals(systemGebietsebene);
    }
  },

  GEMEINDE {
    @Override
    protected boolean akzeptiertInternal(SystemGebietsebene systemGebietsebene) {
      return SystemGebietsebene.GEMEINDE.equals(systemGebietsebene) || SystemGebietsebene.GEMEINDE_KREISFREI.equals(systemGebietsebene) /*ELECT-9043*/;
    }
  };

  public boolean akzeptiert(SystemGebietsebene systemGebietsebene) {
    return systemGebietsebene == null || !systemGebietsebene.isZuBeachten() || akzeptiertInternal(systemGebietsebene);

  }

  protected abstract boolean akzeptiertInternal(SystemGebietsebene systemGebietsebene);
}
