import type { EntitiesState, EntityState } from './entities';
import { EnhancedEntity } from '../store/SchemaManager';
/**
 * Action type for entity operations
 * @typedef {Object} EntityAction
 * @property {string} type - The action type
 * @property {EntitiesState} entities - The entities state
 * @property {EntityStrategy} [strategy] - The update strategy to apply
 */
export type EntityAction = {
    type: string;
    entities: EntitiesState;
    strategy?: EntityStrategy;
};
/**
 * Strategy types for entity operations
 * @typedef {string} EntityStrategy
 * @property {'$replace'} $replace - Replace the entire entity
 * @property {'$set'} $set - Set specific properties
 * @property {'$merge'} $merge - Merge with existing properties
 * @property {'$unset'} $unset - Remove specific properties
 * @property {'$push'} $push - Add items to the end of an array
 * @property {'$unshift'} $unshift - Add items to the beginning of an array
 * @property {'$splice'} $splice - Remove/replace items in an array
 * @property {'$apply'} $apply - Apply a function to transform a value
 * @property {'$toggle'} $toggle - Toggle boolean values
 * @property {'$add'} $add - Add items to a collection
 * @property {'$remove'} $remove - Remove items from a collection
 */
export type EntityStrategy = '$replace' | '$set' | '$merge' | '$unset' | '$push' | '$unshift' | '$splice' | '$apply' | '$toggle' | '$add' | '$remove';
/** Action type for upserting multiple entities */
export declare const UPDATE_ENTITIES = "entities.upsertEntities";
/** Action type for partially updating entities */
export declare const UPDATE_ENTITIES_PARTIAL = "entities.partialUpdates";
/** Action type for deleting multiple entities */
export declare const DELETE_ENTITIES = "entities.deleteEntities";
/** Action type for setting the entire entities state */
export declare const SET_STATE = "entities.setState";
export declare const actionNames: {
    UPDATE_ENTITIES: string;
    UPDATE_ENTITIES_PARTIAL: string;
    DELETE_ENTITIES: string;
    SET_STATE: string;
};
/**
 * Creates an action to update a single entity
 * @param {EntityState} entity - The entity to update
 * @param {string} entityName - The entity type/name
 * @returns {EntityAction} An action object for updating the entity
 */
export declare const updateEntity: (entity: EntityState, entityName: string) => EntityAction;
/**
 * Creates an action to partially update an entity
 * @param {EntityState} entity - The entity to update
 * @param {string} entityName - The entity type/name
 * @param {EntityStrategy} [strategy='$merge'] - The update strategy to apply
 * @returns {EntityAction} An action object for partially updating the entity
 */
export declare const updateEntityPartial: (entity: EntityState, entityName: string, strategy?: EntityStrategy) => EntityAction;
/**
 * Creates an action to update multiple entities
 * @param {EntityState[]} entities - Array of entities to update
 * @param {string} entityName - The entity type/name
 * @returns {EntityAction} An action object for updating multiple entities
 */
export declare const updateEntities: (entities: EntityState[], entityName: string) => EntityAction;
/**
 * Creates an action to partially update multiple entities
 * @param {EntityState[]} entities - Array of entities to update
 * @param {string} entityName - The entity type/name
 * @param {EntityStrategy} [strategy='$merge'] - The update strategy to apply
 * @returns {EntityAction} An action object for partially updating multiple entities
 */
export declare const updateEntitiesPartial: (entities: EntityState[], entityName: string, strategy?: EntityStrategy) => EntityAction;
/**
 * Creates an action to delete a single entity
 * @param {EntityState} entity - The entity to delete
 * @param {string} entityName - The entity type/name
 * @returns {EntityAction} An action object for deleting the entity
 */
export declare const deleteEntity: (entity: EntityState, entityName: string) => EntityAction;
/**
 * Creates an action to delete multiple entities
 * @param {any[]} entities - Array of entities to delete
 * @param {string} entityName - The entity type/name
 * @returns {EntityAction} An action object for deleting multiple entities
 */
export declare const deleteEntities: (entities: any[], entityName: string) => EntityAction;
/**
 * Creates an action to update multiple normalized entities
 * @param {EntitiesState} entities - The normalized entities to update
 * @param {EntityStrategy} [strategy='$merge'] - The update strategy to apply
 * @returns {EntityAction} An action object for updating normalized entities
 */
export declare const updateNormalizedEntities: (entities: EntitiesState, strategy?: EntityStrategy) => EntityAction;
/**
 * Creates an action to delete multiple normalized entities
 * @param {EntitiesState} entities - The normalized entities to delete
 * @returns {EntityAction} An action object for deleting normalized entities
 */
export declare const deleteNormalizedEntities: (entities: EntitiesState) => EntityAction;
/**
 * Creates an action to clear all entities
 * @param {EntitiesState} [entities={...defaultState}] - Optional entities state to set after clearing
 * @returns {EntityAction} An action object for clearing all entities
 */
export declare const clearEntities: (entities?: {
    [x: string]: Record<string, EntityState>;
}) => EntityAction;
/**
 * Creates an action to set the entire entities state
 * @param {EntitiesState} [entities={}] - The entities state to set
 * @returns {EntityAction} An action object for setting the entire entities state
 */
export declare const setState: (entities?: EntitiesState) => EntityAction;
/**
 * Gets a schema by entity name from the SchemaManager
 * @param {string} entityName - The entity type/name
 * @returns {EnhancedEntity} The schema for the entity
 * @throws {Error} If the schema is not found
 */
export declare function getSchema(entityName: string): EnhancedEntity;
declare const _default: {
    actionNames: {
        UPDATE_ENTITIES: string;
        UPDATE_ENTITIES_PARTIAL: string;
        DELETE_ENTITIES: string;
        SET_STATE: string;
    };
    getSchema: typeof getSchema;
    setState: (entities?: EntitiesState) => EntityAction;
    updateEntity: (entity: EntityState, entityName: string) => EntityAction;
    updateEntities: (entities: EntityState[], entityName: string) => EntityAction;
    deleteEntity: (entity: EntityState, entityName: string) => EntityAction;
    deleteEntities: (entities: any[], entityName: string) => EntityAction;
    clearEntities: (entities?: {
        [x: string]: Record<string, EntityState>;
    }) => EntityAction;
    updateEntityPartial: (entity: EntityState, entityName: string, strategy?: EntityStrategy) => EntityAction;
    updateEntitiesPartial: (entities: EntityState[], entityName: string, strategy?: EntityStrategy) => EntityAction;
    updateNormalizedEntities: (entities: EntitiesState, strategy?: EntityStrategy) => EntityAction;
    deleteNormalizedEntities: (entities: EntitiesState) => EntityAction;
};
export default _default;
