import { FormBuilder, FormBuilderContext as BaseFormBuilderContext, FormBuilderFormStorageOperations as BaseFormBuilderFormStorageOperations, FormBuilderSettingsStorageOperations as BaseFormBuilderSettingsStorageOperations, FormBuilderStorageOperations as BaseFormBuilderStorageOperations, FormBuilderSubmissionStorageOperations as BaseFormBuilderSubmissionStorageOperations, FormBuilderSystemStorageOperations as BaseFormBuilderSystemStorageOperations } from "@webiny/api-form-builder/types";
import { DynamoDBDocument } from "@webiny/aws-sdk/client-dynamodb";
import { AttributeDefinition, Entity, Table } from "@webiny/db-dynamodb/toolbox";
import { Client } from "@elastic/elasticsearch";
import { PluginCollection } from "@webiny/plugins/types";
export type Attributes = Record<string, AttributeDefinition>;
export declare enum ENTITIES {
    FORM = "FormBuilderForm",
    ES_SUBMISSION = "FormBuilderSubmissionEs",
    ES_FORM = "FormBuilderFormEs",
    SUBMISSION = "FormBuilderSubmission",
    SYSTEM = "FormBuilderSystem",
    SETTINGS = "FormBuilderSettings"
}
export interface FormBuilderStorageOperationsFactoryParams {
    documentClient: DynamoDBDocument;
    elasticsearch: Client;
    table?: string;
    esTable?: string;
    attributes?: Record<ENTITIES, Attributes>;
    plugins?: PluginCollection;
}
export interface FormBuilderSystemCreateKeysParams {
    tenant: string;
}
export interface FormBuilderSystemStorageOperations extends BaseFormBuilderSystemStorageOperations {
    createSystemPartitionKey: (params: FormBuilderSystemCreateKeysParams) => string;
    createSystemSortKey: () => string;
}
export interface FormBuilderFormCreateKeyParams {
    id: string;
    tenant: string;
    locale: string;
}
export interface FormBuilderFormStorageOperations extends BaseFormBuilderFormStorageOperations {
    createFormPartitionKey: (params: FormBuilderFormCreateKeyParams) => string;
}
export interface FormBuilderSubmissionStorageOperationsCreatePartitionKeyParams {
    tenant: string;
    locale: string;
    formId: string;
}
export interface FormBuilderSubmissionStorageOperations extends BaseFormBuilderSubmissionStorageOperations {
    createSubmissionPartitionKey: (params: FormBuilderSubmissionStorageOperationsCreatePartitionKeyParams) => string;
    createSubmissionSortKey: (id: string) => string;
}
export interface FormBuilderSettingsStorageOperationsCreatePartitionKeyParams {
    tenant: string;
    locale: string;
}
export interface FormBuilderSettingsStorageOperations extends BaseFormBuilderSettingsStorageOperations {
    createSettingsPartitionKey: (params: FormBuilderSettingsStorageOperationsCreatePartitionKeyParams) => string;
    createSettingsSortKey: () => string;
}
export type Entities = "form" | "esForm" | "submission" | "esSubmission" | "system" | "settings";
export interface FormBuilderStorageOperations extends BaseFormBuilderStorageOperations, FormBuilderSettingsStorageOperations, FormBuilderSubmissionStorageOperations, FormBuilderFormStorageOperations, FormBuilderSystemStorageOperations {
    getTable(): Table<string, string, string>;
    getEsTable(): Table<string, string, string>;
    getEntities(): Record<Entities, Entity<any>>;
}
export interface FormBuilderStorageOperationsFactory {
    (params: FormBuilderStorageOperationsFactoryParams): FormBuilderStorageOperations;
}
export interface FormBuilderContext extends BaseFormBuilderContext {
    formBuilder: FormBuilder & {
        storageOperations: FormBuilderStorageOperations;
    };
}
