import { ThemeState } from '../PredefinedConfig/ThemeState';
import { ShortcutState } from '../PredefinedConfig/ShortcutState';
import { QuickSearchState } from '../PredefinedConfig/QuickSearchState';
import { LayoutState } from '../PredefinedConfig/LayoutState';
import { FormatColumnState } from '../PredefinedConfig/FormatColumnState';
import { ExportState } from '../PredefinedConfig/ExportState';
import { DashboardState } from '../PredefinedConfig/DashboardState';
import { CustomSortState } from '../PredefinedConfig/CustomSortState';
import { CalculatedColumnState } from '../PredefinedConfig/CalculatedColumnState';
import { AlertState } from '../PredefinedConfig/AlertState';
import { ConfigState } from '../PredefinedConfig/ConfigState';
import { PlusMinusState } from '../PredefinedConfig/PlusMinusState';
import { ApplicationState } from '../PredefinedConfig/ApplicationState';
import { AdaptablePersistentState, AdaptableState } from '../PredefinedConfig/AdaptableState';
import { FreeTextColumnState } from '../PredefinedConfig/FreeTextColumnState';
import { ToolPanelState } from '../PredefinedConfig/ToolPanelState';
import { AdaptableStateKey, AdaptableModule } from '../PredefinedConfig/Common/Types';
import { AdaptableSearchState, AdaptableSortState, NamedQueryState, PredefinedConfig, ScheduleState, NoteState, ChartingState, FlashingCellState, StatusBarState, StyledColumnState } from '../types';
/**
 * Range of functions to access Predefined Config and Adaptable State
 */
export interface ConfigApi {
    /**
     * Changes the key used for persisting the AdaptableState into localStorage. Optionally provides a predefinedConfig to load.
     * @param adaptableStateKey - key for persisting the AdaptableState into localStorage
     * @param config.predefinedConfig - new predefinedConfig to load
     * @param config.flushCurrentState - whether to flush(persist) the current state before loading the new predefinedConfig
     * @param config.progressIndicatorLabel - label for the progress indicator
     *
     */
    setAdaptableStateKey(adaptableStateKey: string, config?: {
        predefinedConfig?: PredefinedConfig;
        flushCurrentState?: boolean;
        progressIndicatorLabel?: string;
    }): Promise<void>;
    /**
     * Returns current Predefined Config
     */
    getPredefinedConfig(): PredefinedConfig | any;
    /**
     * Reloads existing or supplied Predefined Config; clears persistent state by calling `StateOptions.clearState` function for remote storage removal
     * @param newPredefinedConfig optional Config to load
     */
    reloadPredefinedConfig(newPredefinedConfig?: PredefinedConfig): void;
    /**
     * Copies all Adaptable state to clipboard
     */
    copyAllStateToClipboard(): void;
    /**
     * Copies User State sections of Adaptable State to clipboard
     */
    copyUserStateToClipboard(): void;
    /**
     * Loads supplied user state, replacing (NOT merging) existing User(persisted) State.
     * @param state
     */
    loadUserState(state: {
        [s: string]: ConfigState;
    }): void;
    /**
     * Retrieves ALL state which is currently stored by Adaptable (both persistent and transient/internal)
     */
    getAllState(): AdaptableState;
    /**
     * Retrieves persisted state in AdapTable, i.e. state last stored with `StateOptions.persistState()` function
     */
    getPersistedState(): AdaptablePersistentState;
    /**
     * Gets search-related sections of Adaptable State
     */
    getAdaptableSearchState(): AdaptableSearchState;
    /**
     * Gets sort-related sections of Adaptable State
     */
    getAdaptableSortState(): AdaptableSortState;
    /**
     * Retrieves a brief description of an AdapTable Module
     * @param adaptableModule Adaptable Module to get description for
     */
    getDescriptionForModule(adaptableModule: AdaptableModule): string;
    /**
     * Retrieves the help page for an AdapTable Module
     * @param adaptableModule Adaptable Module to get help page for
     */
    getHelpPageForModule(adaptableModule: AdaptableModule): string;
    /**
     * Returns given section of Adaptable State (as JSON or object)
     * @param stateKey section of State to return
     * @param returnJson whether to return section as JSON or object
     */
    getUserStateByStateKey(stateKey: AdaptableStateKey, returnJson?: boolean): ConfigState | string;
    /**
     * Adds '1' to current revision number of State element
     * @param stateKey Adaptable State Key to update
     */
    incrementUserStateRevision(stateKey: AdaptableStateKey): void;
    /**
     * Returns Alert section of Adaptable State
     * @param returnJson return as JSON rather than object
     */
    getAlertState(returnJson?: boolean): AlertState;
    /**
     * Returns Application section of Adaptable State
     * @param returnJson return as JSON rather than object
     */
    getApplicationState(returnJson?: boolean): ApplicationState;
    /**
     * Returns Calculated Column section of Adaptable State
     * @param returnJson return as JSON rather than object
     */
    getCalculatedColumnState(returnJson?: boolean): CalculatedColumnState;
    /**
     * Returns Charting section of Adaptable State
     * @param returnJson return as JSON rather than object
     */
    getChartingState(returnJson?: boolean): ChartingState;
    /**
     * Returns Note section of Adaptable State
     * @param returnJson return as JSON rather than object
     */
    getNoteState(returnJson?: boolean): NoteState;
    /**
     * Returns Custom Sort section of Adaptable State
     * @param returnJson return as JSON rather than object
     */
    getCustomSortState(returnJson?: boolean): CustomSortState;
    /**
     * Returns Dashboard section of Adaptable State
     * @param returnJson return as JSON rather than object
     */
    getDashboardState(returnJson?: boolean): DashboardState;
    /**
     * Returns Export section of Adaptable State
     * @param returnJson return as JSON rather than object
     */
    getExportState(returnJson?: boolean): ExportState;
    /**
     * Returns Flashing Cell section of Adaptable State
     * @param returnJson return as JSON rather than object
     */
    getFlashingCellState(returnJson?: boolean): FlashingCellState;
    /**
     * Returns Format Column section of Adaptable State
     * @param returnJson return as JSON rather than object
     */
    getFormatColumnState(returnJson?: boolean): FormatColumnState;
    /**
     * Returns FreeText Column section of Adaptable State
     * @param returnJson return as JSON rather than object
     */
    getFreeTextColumnState(returnJson?: boolean): FreeTextColumnState;
    /**
     * Returns Layout section of Adaptable State
     * @param returnJson return as JSON rather than object
     */
    getLayoutState(returnJson?: boolean): LayoutState;
    /**
     * Returns Plus Minus section of Adaptable State
     * @param returnJson return as JSON rather than object
     */
    getPlusMinusState(returnJson?: boolean): PlusMinusState;
    /**
     * Returns Query section of Adaptable State
     * @param returnJson return as JSON rather than object
     */
    getNamedQueryState(returnJson?: boolean): NamedQueryState;
    /**
     * Returns Quick Search section of Adaptable State
     * @param returnJson return as JSON rather than object
     */
    getQuickSearchState(returnJson?: boolean): QuickSearchState;
    /**
     * Returns Schedule section of Adaptable State
     * @param returnJson return as JSON rather than object
     */
    getScheduleState(returnJson?: boolean): ScheduleState;
    /**
     * Returns Shortcut section of Adaptable State
     * @param returnJson return as JSON rather than object
     */
    getShortcutState(returnJson?: boolean): ShortcutState;
    /**
     * Returns StatusBar section of Adaptable State
     * @param returnJson return as JSON rather than object
     */
    getStatusBarState(returnJson?: boolean): StatusBarState;
    /**
     * Returns StyledColumn section of Adaptable State
     * @param returnJson return as JSON rather than object
     */
    getStyledColumnState(returnJson?: boolean): StyledColumnState;
    /**
     * Returns Theme section of Adaptable State
     * @param returnJson return as JSON rather than object
     */
    getThemeState(returnJson?: boolean): ThemeState;
    /**
     * Returns Tool Panel section of Adaptable State
     * @param returnJson return as JSON rather than object
     */
    getToolPanelState(returnJson?: boolean): ToolPanelState;
    /**
     * Sent by each Module when it is Ready
     * @param module Module which is Ready
     */
    dispatchStateReadyAction(module: AdaptableModule): void;
}
