import { ContainerOptions } from './ContainerOptions';
import { LayoutOptions } from './LayoutOptions';
import { InitialState } from '../AdaptableState/InitialState';
import { EditOptions } from './EditOptions';
import { StateOptions } from './StateOptions';
import { UserInterfaceOptions } from './UserInterfaceOptions';
import { AdaptablePlugin } from './AdaptablePlugin';
import { ExportOptions } from './ExportOptions';
import { TeamSharingOptions } from './TeamSharingOptions';
import { EntitlementOptions } from './EntitlementOptions';
import { NotificationsOptions } from './NotificationsOptions';
import { DashboardOptions } from './DashboardOptions';
import { ToolPanelOptions } from './ToolPanelOptions';
import { DataChangeHistoryOptions } from './DataChangeHistoryOptions';
import { SettingsPanelOptions } from './SettingsPanelOptions';
import { FlashingCellOptions } from './FlashingCellOptions';
import { AlertOptions } from './AlertOptions';
import { ExpressionOptions } from './ExpressionOptions';
import { ColumnOptions } from './ColumnOptions';
import { ChartingOptions } from './ChartingOptions';
import { ActionColumnOptions } from './ActionColumnOptions';
import { CustomSortOptions } from './CustomSortOptions';
import { DataSetOptions } from './DataSetOptions';
import { CellSummaryOptions } from './CellSummaryOptions';
import { CalendarOptions } from './CalendarOptions';
import { QuickSearchOptions } from './QuickSearchOptions';
import { FormatColumnOptions } from './FormatColumnOptions';
import { Fdc3Options } from './Fdc3Options';
import { NoteOptions } from './NoteOptions';
import { PredicateOptions } from './PredicateOptions';
import { DataImportOptions } from './DataImportOptions';
import { CommentOptions } from './CommentOptions';
import { ColumnMenuOptions } from './ColumnMenuOptions';
import { ContextMenuOptions } from './ContextMenuOptions';
import { FilterOptions } from './FilterOptions';
import { RowFormOptions } from './RowFormOptions';
/**
 * Large group of options enabling developers to set up AdapTable at design time to fit precise requirements
 */
export interface AdaptableOptions<TData = any, TContext = Record<string, any>> {
    /**
     * Identifier for this instance of AdapTable
     *
     * @defaultValue 'adaptable_id_${random_number}'
     * @gridInfoItem
     * @noCodeItem
     */
    adaptableId?: string;
    /**
     * Identifier used as localStorage persistence key for AdaptableState
     *
     * @defaultValue `adaptableId` value
     * @gridInfoItem
     */
    adaptableStateKey?: string;
    /**
     * Will autogenerate a Primary Key; only use as a last resort if no unique column is available, as limits some Adaptable functionalities
     *
     * @defaultValue false
     * @gridInfoItem
     */
    autogeneratePrimaryKey?: boolean;
    /**
     * Commercial license key. If the license is not provided or is expired, various visual information notes will be displayed and some functionality may be limited.
     */
    licenseKey?: string;
    /**
     * Application-specific context object - is included by AdapTable in all callbacks and Events
     */
    adaptableContext?: TContext;
    /**
     * Initial State set at design-time and shipped with AdapTable for first use; must include at least one Layout
     *
     * @defaultValue undefined
     */
    initialState: InitialState;
    /**
     * Name of Column in AdapTable guaranteed to contain unique values
     *
     * @defaultValue n/a (Mandatory)
     * @gridInfoItem
     */
    primaryKey: string;
    /**
     * Name of current AdapTable user
     *
     * @defaultValue 'anonymous'
     * @gridInfoItem
     */
    userName?: string;
    /**
     * Options for managing Action Columns
     */
    actionColumnOptions?: ActionColumnOptions<TData>;
    /**
     * Options for managing Row Forms
     */
    rowFormOptions?: RowFormOptions<TData>;
    /**
     * Options for managing Alerts in AdapTable
     *
     * @gridInfoContainer
     * @noCodeContainer
     */
    alertOptions?: AlertOptions<TData>;
    /**
     * Options for managing Holidays and Working Days
     */
    calendarOptions?: CalendarOptions;
    /**
     * Options for adding custom Cell Summaries
     */
    cellSummaryOptions?: CellSummaryOptions<TData>;
    /**
     * Options for managing AG Grid's Charting
     * @noCodeContainer
     */
    chartingOptions?: ChartingOptions;
    /**
     * Options related to Columns
     * @noCodeContainer
     */
    columnOptions?: ColumnOptions;
    /**
     * Options for managing AdapTable Column Menu
     *
     * @gridInfoContainer
     */
    columnMenuOptions?: ColumnMenuOptions<TData>;
    /**
     * Options for managing collaborative Comments
     */
    commentOptions?: CommentOptions<TData>;
    /**
     * Options for setting the 'Div' elements in which AdapTable, AG Grid, popups are placed
     */
    containerOptions?: ContainerOptions;
    /**
     * Options for managing AdapTable Context Menu
     *
     * @gridInfoContainer
     */
    contextMenuOptions?: ContextMenuOptions<TData>;
    /**
     * Options for using Custom Sort
     */
    customSortOptions?: CustomSortOptions;
    /**
     * Options for managing the Dashboard in AdapTable
     *
     * @gridInfoContainer
     * @noCodeContainer
     */
    dashboardOptions?: DashboardOptions;
    /**
     * Options to manage Data Change History Module which provides an overview of all data changes
     *
     * @gridInfoContainer
     * @noCodeContainer
     */
    dataChangeHistoryOptions?: DataChangeHistoryOptions<TData>;
    /**
     * Options for managing the Data Import function
     */
    dataImportOptions?: DataImportOptions;
    /**
     * Options to manage Data Sets
     */
    dataSetOptions?: DataSetOptions<TData>;
    /**
     * Options related to Editing in AdapTable including Server Validation
     *
     * @gridInfoContainer
     */
    editOptions?: EditOptions<TData>;
    /**
     * Options for managing Entitlements
     *
     * @gridInfoContainer
     */
    entitlementOptions?: EntitlementOptions;
    /**
     * Options for managing Exporting and Reports in AdapTable
     *
     * @gridInfoContainer
     */
    exportOptions?: ExportOptions<TData>;
    /**
     * Options for managing AdapTableQL Expressions
     * @noCodeContainer
     */
    expressionOptions?: ExpressionOptions<TData>;
    /**
     * Options for managing FDC3 in AdapTable
     */
    fdc3Options?: Fdc3Options;
    /**
     * Options for managing Flashing Cells - primarily default values
     *
     * @gridInfoContainer
     */
    flashingCellOptions?: FlashingCellOptions;
    /**
     * Options for providing Custom Display Formats
     */
    formatColumnOptions?: FormatColumnOptions;
    /**
     * Filtering Options - both Column Filters and the Grid Filter
     */
    filterOptions?: FilterOptions<TData>;
    /**
     * Options related to Layouts
     *
     * @gridInfoContainer
     * @noCodeContainer
     */
    layoutOptions?: LayoutOptions;
    /**
     * Options for managing personal Notes
     */
    noteOptions?: NoteOptions;
    /**
     * Options for managing Notifications in AdapTable
     *
     * @gridInfoContainer
     * @noCodeContainer
     */
    notificationsOptions?: NotificationsOptions;
    /**
     * Options for managing Predicates in AdapTableQL
     */
    predicateOptions?: PredicateOptions;
    /**
     * Options for managing Search related functions in AdapTable
     *
     * @gridInfoContainer
     * @noCodeContainer
     */
    quickSearchOptions?: QuickSearchOptions<TData>;
    /**
     * Setting panel options
     *
     * @gridInfoContainer
     * @noCodeContainer
     */
    settingsPanelOptions?: SettingsPanelOptions;
    /**
     * Options related to state hydration / dehydration - allows users to intercept state persistence and state loading and change default behaviour of saving to local storage
     */
    stateOptions?: StateOptions;
    /**
     * Options for managing 'Team Sharing' which allows users to create Adaptable Objects and share with colleagues
     *
     * @gridInfoContainer
     */
    teamSharingOptions?: TeamSharingOptions;
    /**
     * Options related to managing the Tool Panel elements in AdapTable
     *
     * @gridInfoContainer
     * @noCodeContainer
     */
    toolPanelOptions?: ToolPanelOptions;
    /**
     * Options for managing the User Interface elements of AdapTable, i.e. Action Columns, Color Palette etc.
     *
     * @gridInfoContainer
     */
    userInterfaceOptions?: UserInterfaceOptions<TData>;
    /**
     * Used for managing the AdapTable Plugins
     */
    plugins?: AdaptablePlugin[];
}
