/**
 * Constraint component types
 */
declare enum CONSTRAINT_COMPONENT_TYPES {
    FUNCTION = "function",
    CONDITION = "condition",
    CONSTANT = "constant",
    PROPERTY = "property",
    SYSTEM_VALUES = "system",
    SESSION = "session",
    ENVIRONMENT = "environment"
}
/**
 * Supported data types for conditions and functions
 */
declare enum DATA_TYPES {
    STRING = "string",
    NUMBER = "number",
    INTEGER = "integer",
    BOOLEAN = "boolean",
    DATE = "date",
    DATETIME = "datetime",
    ARRAY = "array",
    INHERIT = "inherit"
}
/**
 * System value keys
 */
declare enum SYSTEM_VALUE {
    CURRENT_USER_NAME = "current_user_name",
    CURRENT_USER_EMAIL = "current_user_email",
    CURRENT_USER_ROLES = "current_user_roles",
    CURRENT_DATE = "current_date",
    CURRENT_YEAR = "current_year",
    CURRENT_MONTH = "current_month",
    CURRENT_DAY = "current_day",
    CURRENT_DAY_OF_WEEK = "current_day_of_week",
    NOW = "now"
}
/**
 * Constraint operation keys for type-safe references
 */
declare enum CONSTRAINT_KEYS {
    ALL_OF = "all_of",
    ANY_OF = "any_of",
    ONE_OF = "one_of",
    NONE_OF = "none_of",
    CONTAINS = "contains",
    STARTS_WITH = "starts_with",
    ENDS_WITH = "ends_with",
    IS_EMPTY = "is_empty",
    IS_NOT_EMPTY = "is_not_empty",
    LENGTH = "length",
    IS_EQUAL_TO = "is_equal_to",
    IS_NOT_EQUAL_TO = "is_not_equal_to",
    IS_GREATER_THAN = "is_greater_than",
    IS_LESS_THAN = "is_less_than",
    IS_GREATER_THAN_OR_EQUAL_TO = "is_greater_than_or_equal_to",
    IS_LESS_THAN_OR_EQUAL_TO = "is_less_than_or_equal_to",
    IS_AFTER = "is_after",
    IS_BEFORE = "is_before",
    IGNORE_CASE = "ignore_case",
    IN = "in",
    NOT_IN = "not_in",
    CONCATENATE = "concatenate",
    TO_LOWER_CASE = "to lower case",
    TO_UPPER_CASE = "to upper case",
    TRIM = "trim",
    ADD = "add",
    SUBTRACT = "subtract",
    MULTIPLY_BY = "multiply_by",
    DIVIDE_BY = "divide_by",
    ABSOLUTE_VALUE_OF = "absolute_value_of",
    COUNT = "count",
    SUM = "sum"
}
interface ConstraintComponent {
    text: string;
    value: string;
    type: CONSTRAINT_COMPONENT_TYPES;
    outputDataType: string;
    applicableDataTypes: string[];
    allowUserInput: boolean;
    unsupportedComponentTypes?: CONSTRAINT_COMPONENT_TYPES[];
    overrideUnsupportedKeys?: CONSTRAINT_KEYS[];
}
interface Constraint {
    name: string;
    components: ComponentRow[];
}
interface ComponentRow {
    component: string | any[];
    dataType: string;
    default: string;
    'ot2mc-row-id': string;
    allowUserInput: boolean;
    isRepeating: boolean;
}
interface ConstraintComponent {
    text: string;
    value: string;
    type: CONSTRAINT_COMPONENT_TYPES;
    outputDataType: string;
    applicableDataTypes: string[];
    allowUserInput: boolean;
    unsupportedComponentTypes?: CONSTRAINT_COMPONENT_TYPES[];
    overrideUnsupportedKeys?: CONSTRAINT_KEYS[];
}
interface ConstraintComponentModel {
    id: string;
    schemaId: string;
    data: ConstraintComponent;
}
/**
 * Configuration for a constraint component
 */
interface ConstraintConfig {
    id: string;
    /**
     * Type of the component (comparison, function, system value, etc.)
     */
    type: CONSTRAINT_COMPONENT_TYPES;
    /**
     * Data types applicable for this component
     */
    applicableDataTypes: string[];
    /**
     * The output/return type this component produces
     */
    outputDataType: string;
    /**
     * Whether user input is allowed for this component
     */
    allowUserInput: boolean;
    /**
     * Component types that are not supported with this component
     */
    unsupportedComponentTypes: CONSTRAINT_COMPONENT_TYPES[];
    /**
     * Component keys that override exclusion rules for this component
     */
    overrideUnsupportedKeys?: CONSTRAINT_KEYS[];
}
interface ConstraintsConfigType {
    conditions: Record<string, ConstraintConfig>;
    functions: Record<string, ConstraintConfig>;
    systemValues: Record<string, ConstraintConfig>;
}
/**
 * Generates a unique ID for a condition configuration.
 * Format: exp-{type-prefix}-{uuid}
 */
declare function generateComponentId(type: CONSTRAINT_COMPONENT_TYPES): string;
/**
 * Get entire constraint configs
 */
declare function getAllConstraintConfigs(): Record<string, ConstraintConfig>;
/**
 * Returns condition configs applicable for a specific data type
 * @param dataType The data type to filter conditions by
 * @returns {ConstraintConfig} Condition configs applicable for the specified data type
 */
declare function getConditionConfigsForDataType(dataType: string): ConstraintConfig;
/**
 * Returns function configs applicable for a specific data type
 * @param dataType The data type to filter functions by
 * @returns {ConstraintConfig} Function configs applicable for the specified data type
 */
declare function getFunctionConfigsForDataType(dataType: string): ConstraintConfig;
/**
 * Returns system value configs applicable for a specific data type
 * @param dataType The data type to filter system values by
 * @returns {ConstraintConfig} System value configs applicable for the specified data type
 */
declare function getSystemValueConfigsForDataType(dataType: string): ConstraintConfig;
/**
 * Returns the ID associated with a given component key
 */
declare function getIdForConstraintKey(componentKey: string): string | undefined;
/**
 * Returns all supported data types
 * @returns {string[]} Array of supported data types
 */
declare function getAllSupportedDataTypes(): string[];
/**
 * Parses a constant value based on its data type
 * @param dataType  The data type of the constant
 * @param value The value to be parsed
 * @returns The parsed value
 */
declare function parseConstant(dataType: string, value: any): any;
export { CONSTRAINT_COMPONENT_TYPES, DATA_TYPES, SYSTEM_VALUE, CONSTRAINT_KEYS, ConstraintsConfigType, ConstraintConfig, Constraint, ComponentRow, ConstraintComponent, ConstraintComponentModel, generateComponentId, getIdForConstraintKey, getAllConstraintConfigs, getConditionConfigsForDataType, getFunctionConfigsForDataType, getSystemValueConfigsForDataType, getAllSupportedDataTypes, parseConstant };
