import Helper from '../../Utilities/Helpers/Helper';
import { createUuid } from '../../AdaptableState/Uuid';
// Base class for the Api - provides checking dispatching methods
export class ApiBase {
    _adaptable;
    /**
     * Constructor for all the api classes which simply takes and assigns an instance of Adaptable
     * @param _adaptable the core IAdaptable object
     */
    constructor(_adaptable) {
        this._adaptable = _adaptable;
    }
    getAdatableLogger() {
        return this._adaptable.logger;
    }
    logInfo(message, ...optionalParams) {
        this._adaptable.logger.info(message, ...optionalParams);
    }
    logSuccess(message, ...optionalParams) {
        this._adaptable.logger.success(message, ...optionalParams);
    }
    logWarn(message, ...optionalParams) {
        this._adaptable.logger.warn(message, ...optionalParams);
    }
    logError(message, ...optionalParams) {
        this._adaptable.logger.error(message, ...optionalParams);
    }
    getAdaptableVariant() {
        return this._adaptable.variant;
    }
    isAdapTableReady() {
        return this._adaptable.isReady;
    }
    /**
     * Base api helper method which ensure that Adaptable Object being used in the function is not null or undefined
     *
     * If it does not exist then we log an error and the api method should stop
     * @param item AdaptableObject being checked
     * @param name the name of the object if it has one (e.g. if its a search)
     * @param type the actual type of the object being checked
     */
    checkItemExists(item, name, type) {
        if (Helper.objectNotExists(item)) {
            this.logError(`No ${type} found with the name: ${name}`);
            return false;
        }
        return true;
    }
    checkArrayExists(array) {
        if (!Array.isArray(array)) {
            this.logError(`Item passed to Api function was not an array`);
            return false;
        }
        return true;
    }
    handleLayoutExtensionObjects(objectList = [], module, config) {
        if (config?.includeLayoutNotExtendedObjects) {
            return objectList;
        }
        const extendedLayout = config?.extendedLayoutName
            ? this.getLayoutApi().getLayoutByName(config.extendedLayoutName)
            : this.getLayoutApi().getCurrentLayout();
        return objectList.filter((objectItem) => this.getLayoutApi().internalApi.isObjectExtendedInLayout(objectItem, module, extendedLayout));
    }
    /**
     * Base api Helper method that dispatches a *Redux Action* to the Store
     * @param action the Redux Action to be dispatched
     */
    dispatchAction(action) {
        if (this._adaptable.isDestroyed) {
            return;
        }
        this._adaptable.adaptableStore.TheStore.dispatch(action);
    }
    /**
     * Returns the entire State from the Store
     *
     * This is a simple *getState()* call
     */
    getAdaptableState() {
        return this.getAdaptableStore().TheStore.getState();
    }
    getAdaptableStore() {
        return this._adaptable.adaptableStore;
    }
    // Add the Uuid to the object if not present;
    // It's generally done in Redux also but no harm checking in Api also in case we missed it.
    addUidToAdaptableObject(adaptableObject) {
        if (!adaptableObject.Uuid) {
            adaptableObject.Uuid = createUuid();
        }
    }
    getModuleInfoByModuleId(module) {
        return this._adaptable.ModuleService.getModuleInfoByModule(module);
    }
    showModulePopup(module, moduleParams) {
        let moduleInfo = this.getModuleInfoByModuleId(module);
        if (moduleInfo) {
            this._adaptable.api.internalApi.showPopupScreen(moduleInfo.ModuleName, moduleInfo.Popup, moduleParams);
        }
    }
    getOptions() {
        return this._adaptable.adaptableOptions;
    }
    getActionColumnOptions() {
        return this.getOptions().actionColumnOptions;
    }
    getRowFormOptions() {
        return this.getOptions().rowFormOptions;
    }
    getColumnOptions() {
        return this.getOptions().columnOptions;
    }
    getCommentOptions() {
        return this.getOptions().commentOptions;
    }
    getNoteOptions() {
        return this.getOptions().noteOptions;
    }
    getCustomSortOptions() {
        return this.getOptions().customSortOptions;
    }
    getDataSetOptions() {
        return this.getOptions().dataSetOptions;
    }
    getCalendarOptions() {
        return this.getOptions().calendarOptions;
    }
    getCellSummaryOptions() {
        return this.getOptions().cellSummaryOptions;
    }
    getContainerOptions() {
        return this.getOptions().containerOptions;
    }
    getNotificationsOptions() {
        return this.getOptions().notificationsOptions;
    }
    getAlertOptions() {
        return this.getOptions().alertOptions;
    }
    getDashboardOptions() {
        return this.getOptions().dashboardOptions;
    }
    getEditOptions() {
        return this.getOptions().editOptions;
    }
    getExportOptions() {
        return this.getOptions().exportOptions;
    }
    getLayoutOptions() {
        return this.getOptions().layoutOptions;
    }
    getColumnMenuOptions() {
        return this.getOptions().columnMenuOptions;
    }
    getContextMenuOptions() {
        return this.getOptions().contextMenuOptions;
    }
    getFilterOptions() {
        return this.getOptions().filterOptions;
    }
    getExpressionOptions() {
        return this.getOptions().expressionOptions;
    }
    getPredicateOptions() {
        return this.getOptions().predicateOptions;
    }
    getQuickSearchOptions() {
        return this.getOptions().quickSearchOptions;
    }
    getFormatColumnOptions() {
        return this.getOptions().formatColumnOptions;
    }
    getStateOptions() {
        return this.getOptions().stateOptions;
    }
    getTeamSharingOptions() {
        return this.getOptions().teamSharingOptions;
    }
    getUserInterfaceOptions() {
        return this.getOptions().userInterfaceOptions;
    }
    getToolPanelOptions() {
        return this.getOptions().toolPanelOptions;
    }
    getChartingOptions() {
        return this.getOptions().chartingOptions;
    }
    getDataChangeHistoryOptions() {
        return this.getOptions().dataChangeHistoryOptions;
    }
    getEntitlementOptions() {
        return this.getOptions().entitlementOptions;
    }
    getFlashingCellOptions() {
        return this.getOptions().flashingCellOptions;
    }
    getSettingsPanelOptions() {
        return this.getOptions().settingsPanelOptions;
    }
    getFdc3Options() {
        return this.getOptions().fdc3Options;
    }
    getAdaptableApi() {
        return this._adaptable.api;
    }
    getAgGridApi() {
        return this.getAdaptableApi().agGridApi;
    }
    getAdaptableInternalApi() {
        return this.getAdaptableApi().internalApi;
    }
    getActionColumnApi() {
        return this.getAdaptableApi().actionColumnApi;
    }
    getApplicationApi() {
        return this.getAdaptableApi().applicationApi;
    }
    getAlertApi() {
        return this.getAdaptableApi().alertApi;
    }
    getFlashingCellApi() {
        return this.getAdaptableApi().flashingCellApi;
    }
    getPredicateApi() {
        return this.getAdaptableApi().predicateApi;
    }
    getBulkUpdateApi() {
        return this.getAdaptableApi().bulkUpdateApi;
    }
    getCalendarApi() {
        return this.getAdaptableApi().calendarApi;
    }
    getCalculatedColumnApi() {
        return this.getAdaptableApi().calculatedColumnApi;
    }
    getCellSummaryApi() {
        return this.getAdaptableApi().cellSummaryApi;
    }
    getColumnApi() {
        return this.getAdaptableApi().columnApi;
    }
    getStateApi() {
        return this.getAdaptableApi().stateApi;
    }
    getCustomSortApi() {
        return this.getAdaptableApi().customSortApi;
    }
    getDashboardApi() {
        return this.getAdaptableApi().dashboardApi;
    }
    getDataSetApi() {
        return this.getAdaptableApi().dataSetApi;
    }
    getEntitlementApi() {
        return this.getAdaptableApi().entitlementApi;
    }
    getEventApi() {
        return this.getAdaptableApi().eventApi;
    }
    getExportApi() {
        return this.getAdaptableApi().exportApi;
    }
    getFormatColumnApi() {
        return this.getAdaptableApi().formatColumnApi;
    }
    getFreeTextColumnApi() {
        return this.getAdaptableApi().freeTextColumnApi;
    }
    getGridApi() {
        return this.getAdaptableApi().gridApi;
    }
    getLayoutApi() {
        return this.getAdaptableApi().layoutApi;
    }
    getGridFilterApi() {
        return this.getAdaptableApi().filterApi.gridFilterApi;
    }
    getColumnFilterApi() {
        return this.getAdaptableApi().filterApi.columnFilterApi;
    }
    getFilterApi() {
        return this.getAdaptableApi().filterApi;
    }
    getRowFormApi() {
        return this.getAdaptableApi().rowFormApi;
    }
    getPlusMinusApi() {
        return this.getAdaptableApi().plusMinusApi;
    }
    getQuickSearchApi() {
        return this.getAdaptableApi().quickSearchApi;
    }
    getScheduleApi() {
        return this.getAdaptableApi().scheduleApi;
    }
    getShortcutApi() {
        return this.getAdaptableApi().shortcutApi;
    }
    getSmartEditApi() {
        return this.getAdaptableApi().smartEditApi;
    }
    getSystemStatusApi() {
        return this.getAdaptableApi().systemStatusApi;
    }
    getThemeApi() {
        return this.getAdaptableApi().themeApi;
    }
    getUserInterfaceApi() {
        return this.getAdaptableApi().userInterfaceApi;
    }
    getNamedQueryApi() {
        return this.getAdaptableApi().namedQueryApi;
    }
    getExpressionApi() {
        return this.getAdaptableApi().expressionApi;
    }
    getPluginsApi() {
        return this.getAdaptableApi().pluginsApi;
    }
    getSettingsPanelApi() {
        return this.getAdaptableApi().settingsPanelApi;
    }
    getStyledColumnApi() {
        return this.getAdaptableApi().styledColumnApi;
    }
    getToolPanelApi() {
        return this.getAdaptableApi().toolPanelApi;
    }
    getTeamSharingApi() {
        return this.getAdaptableApi().teamSharingApi;
    }
    getColumnScopeApi() {
        return this.getAdaptableApi().columnScopeApi;
    }
    getDataChangeHistoryApi() {
        return this.getAdaptableApi().dataChangeHistoryApi;
    }
    getChartingApi() {
        return this.getAdaptableApi().chartingApi;
    }
    getStatusBarApi() {
        return this.getAdaptableApi().statusBarApi;
    }
    getFdc3Api() {
        return this.getAdaptableApi().fdc3Api;
    }
    getOptionsApi() {
        return this.getAdaptableApi().optionsApi;
    }
    destroy() {
        delete this._adaptable;
    }
}
