
package de.ivu.elect.business.personenregister.boundary;

import de.ivu.elect.business.konfiguration.entity.ElectLogLevel;
import de.ivu.elect.business.mandant.entity.Mandant;
import de.ivu.elect.business.person.entity.Geschlecht;
import de.ivu.elect.business.personenregister.entity.PersonenregisterPersonendaten;

import java.io.Serializable;
import java.util.List;
import java.util.UUID;

public interface Personenregister<T extends PersonenregisterPersonendaten> extends Serializable {

  boolean isAktiviert(Mandant mandant); // ELECT-7511

  boolean isErreichbar(Mandant mandant);

  String getName();

  String getKurzname();

  boolean isSearchByPersonendatenManuellSupported(Mandant mandant);

  boolean isSearchByPersonendatenAutomatischSupported(Mandant mandant);

  PersonenregisterSearchResult<T> search(Mandant mandant, UUID requestUUID, PersonenregisterByPersonendatenSearchParameters searchParameters);

  PersonenregisterSearchResult<T> search(Mandant mandant, UUID requestUUID, PersonenregisterByOrdnungsmerkmalSearchParameters searchParameters);

  List<Geschlecht> getGeschlechterSupported();

  boolean isSearchByEinwohnerstatusSupported();

  boolean isSearchByOrdnungsmerkmalManuellSupported(Mandant mandant);

  boolean isSearchByOrdnungsmerkmalAutomatischSupported(Mandant mandant);

  ElectLogLevel getLogLevel(Mandant mandant);

  void resetCache(Mandant mandant);
}
