import { TypeUuid } from '../Uuid';
import { ColumnScope } from './ColumnScope';
/**
 * The current version of AdapTable being used
 */
export type AdaptableVersion = `${string}.${string}.${string}`;
/**
 * Interface for objects that can be uniquely identified by a UUID
 */
export interface Identifiable {
    /**
     * Unique identifier for the Object, generated and used internally by AdapTable
     */
    Uuid?: TypeUuid;
}
/**
 * Base interface which all other Adaptable State-related objects extend
 */
export interface AdaptableObject extends Identifiable {
    /**
     * Source of state object: 'InitialState' if provided via `AdaptableOptions.initialState`, 'User' or undefined for runtime state
     */
    Source?: 'InitialState' | 'User';
    /**
     * Current AdapTable version
     */
    AdaptableVersion?: AdaptableVersion;
    /**
     * Sets Entity to ReadOnly (overwriting a Strategy Entitlement of 'Full')
     *
     * @inheritedDoc
     */
    IsReadOnly?: boolean;
    /**
     * List of Tags associated with the Object; often used for extending Layouts
     */
    Tags?: AdaptableObjectTag[];
    /**
     * Optional metadata associated with the object; can be used to store additional information or configuration
     */
    Metadata?: any;
}
/**
 * AdaptableObjectTag Object Tag - currently supporting only plain string values, but open for future extensions, if needed
 */
export type AdaptableObjectTag = string;
/**
 * Lookup criteria for finding specific Adaptable Objects; all given criteria will be composed with an AND operator
 */
export interface AdaptableObjectLookupCriteria {
    /**
     * ColumnScope
     */
    scope?: ColumnScope;
    /**
     * AdaptableObjectTag
     */
    tag?: AdaptableObjectTag;
    /**
     * Technical IDs of Adaptable Objects
     */
    ids?: AdaptableObject['Uuid'][];
}
export interface AdaptableObjectWithScope extends AdaptableObject {
    Scope: ColumnScope;
}
/**
 * Interface that extends Adaptable Object for those config items that can be suspended at run-time
 */
export interface SuspendableObject extends AdaptableObject {
    /**
     * Suspends (i.e. turns off) an Adaptable Object
     *
     * @inheritedDoc
     */
    IsSuspended?: boolean;
}
