import { AdaptableModule } from '../AdaptableState/Common/Types';
import { AccessLevel, Entitlement } from '../AdaptableState/Common/Entitlement';
import { BaseContext } from '../types';
/**
 * Options for managing Entitlements in AdapTable, ie. which Modules are available to the User and whether as *Full*, *ReadOnly* or *Hidden*.
 */
export interface EntitlementOptions {
    /**
     * Returns either collection of `Entitlements`, or a function to invoke when an Entitlement is required
     *
     * @gridInfoItem
     */
    moduleEntitlements?: Entitlement[] | ((entitlementContext: EntitlementContext) => AccessLevel | undefined);
    /**
     * AccessLevel to use when an Entitlement is not explicitly set; can be hardcoded value or a function to invoke
     *
     * @defaultValue 'Full'
     * @gridInfoItem
     */
    defaultAccessLevel?: AccessLevel | ((defaultAccessLevelContext: DefaultAccessLevelContext) => AccessLevel);
}
/**
 * Provided to moduleEntitlements function when setting Entitlements programatically
 */
export interface EntitlementContext extends BaseContext {
    /**
     * Module being entitled
     */
    adaptableModule: AdaptableModule;
    /**
     * The default Access Level for the current instance
     */
    defaultAccessLevel: AccessLevel;
}
/**
 * Provided to defaultAccessLevel function when setting Default Entitlement value programatically
 */
export interface DefaultAccessLevelContext extends BaseContext {
}
