/// <reference types="react" />
import { Structure } from './Models/Document';
import { StoreAction } from './Models/Redux';
import { Builder } from './Models/Builder';
import { Config, Rule } from './Models/Config';
export interface Functions<Model extends Structure, Container extends Builder<Model, Container>> {
    ADD: (params: {
        payload: Container['extract'];
        extra?: Record<string, unknown>;
    }) => Promise<Container>;
    UPDATE: (params: {
        id: string;
        object: Container['extract'];
    }) => Promise<Container>;
    DELETE: (params: {
        id: string;
    }) => Promise<Container>;
    ASYNC_ADD: (params: {
        payload: Container['extract'];
        extra: Record<string, unknown>;
        dummy_id?: string;
    }) => Promise<Container>;
    LOCAL_ADD: (id: string, payload: Container['extract']) => Container;
    LOCAL_DELETE: (id: string) => Container;
    LOCAL_UPDATE: (id: string, object: Model) => Container;
    SERVER_ADD: (params: {
        payload: Container['extract'];
        extra: Record<string, unknown>;
    }) => Promise<Container>;
    SERVER_UPDATE: (params: {
        id: string;
        object: Model;
    }) => Promise<Container>;
    SERVER_DELETE: (params: {
        id: string;
    }) => Promise<Container>;
    FETCH_MANY: (params?: {
        override_url?: string;
    }) => Promise<Container[]>;
    FETCH_ONE: (params: {
        id: string;
    }) => Promise<Container[]>;
    FETCH_ANY: (params: {
        route: string[];
    }) => Promise<Container[]>;
}
export interface MoreFunctions<Model extends Structure, Container extends Builder<Model, Container>> extends Functions<Model, Container> {
    GET: () => Map<string, Container>;
}
export declare function setConfig<T extends string, C extends Config<T, Structure, any>>(conf: C): Array<Extract<C['rules'][number], {
    action: T;
}>>;
export declare function getConfig(): Config<any, Structure, any>;
export declare function actionBuilder<Model extends Structure, Container extends Builder<Model, Container>>(model_name: string, api: string, dispatch: React.Dispatch<StoreAction<Model>>, override_url?: string): Functions<Model, Container>;
export declare function CreateBuilder(builder: Builder<any, any>): Builder<Structure, any>;
export declare function stateSorter<Container extends Builder<Structure, Container>>(type: string): Rule<string, Structure, Builder<Structure, Container>>;
export type useStorageReturn<T extends Rule<string, Structure, any>[], Action extends T[number]['action']> = Map<string, Extract<T[number], {
    action: Action;
}>['builder']>;
export type returnType<T extends Rule<string, Structure, any>[], Action extends T[number]['action']> = MoreFunctions<Extract<T[number], {
    action: Action;
}>['builder']['getObj'], Extract<T[number], {
    action: Action;
}>['builder']>;
export type useContainerType<T extends Rule<string, Structure, any>[], Action extends T[number]['action']> = Extract<T[number], {
    action: Action;
}>['builder'];
export type useStructureType<T extends Rule<string, Structure, any>[], Action extends T[number]['action']> = Extract<T[number], {
    action: Action;
}>['builder']['getObj'];
