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

import de.ivu.elect.business.mandant.entity.MandantArt;

public enum UseCaseMandantArt {

  ALL {

    @Override
    public boolean isAccept(MandantArt mandantArt) {
      return true;
    }
  },
  SYSTEM {

    @Override
    public boolean isAccept(MandantArt mandantArt) {
      return mandantArt.isSystemMandant();
    }
  },
  CUSTOMER {

    @Override
    public boolean isAccept(MandantArt mandantArt) {
      return mandantArt.isCustomerMandant();
    }
  },
  // Spezialfall für Rechte, die eine Mandantenunterstützung zwingend brauchen z.B. MANDANT_SEARCH
  SYSTEM_MANDANTEN_AKTIVIERT {

    @Override
    public boolean isAccept(MandantArt mandantArt) {
      return mandantArt.isSystemMandant() && !mandantArt.isOhneMandant();
    }
  },
  // Spezialfall für Rechte, die eine Mandantenunterstützung zwingend brauchen z.B. WAHL_FUER_SUBSYSTEME_KONFIGURIEREN
  CUSTOMER_MANDANTEN_AKTIVIERT {

    @Override
    public boolean isAccept(MandantArt mandantArt) {
      return mandantArt.isCustomerMandant() && !mandantArt.isOhneMandant();
    }
  },
  // Spezialfall für Rechte, die eine Mandantenunterstützung NICHT unterstüzen (Replikation, Stimmenübergabe...)
  OHNE_MANDANT {

    @Override
    public boolean isAccept(MandantArt mandantArt) {
      return mandantArt.isOhneMandant();
    }
  };

  UseCaseMandantArt() {
  }

  public abstract boolean isAccept(MandantArt mandantArt);
}
