/**
 * Timestamp compare function
 */
export type ICompareTimeStamp = (timeStamp: number) => boolean;
/**
 * --- Type Defs ---
 */
export type runtimeRED = import('../types/typedefs.js').runtimeRED;
/**
 * --- Type Defs ---
 */
export type runtimeNode = import('../types/typedefs.js').runtimeNode;
/**
 * --- Type Defs ---
 */
export type runtimeNodeConfig = import('../types/typedefs.js').runtimeNodeConfig;
/**
 * --- Type Defs ---
 */
export type ITimeObject = import("./dateTimeHelper.js").ITimeObject;
/**
 * --- Type Defs ---
 */
export type ILimitationsObj = import("./dateTimeHelper.js").ILimitationsObj;
/**
 * --- Type Defs ---
 */
export type IPositionConfigNode = import("../10-position-config.js").IPositionConfigNode;
/**
 * --- Type Defs ---
 */
export type ITimePropertyResult = import("../10-position-config.js").ITimePropertyResult;
/**
 * object for sore autotrigger data
 */
export type IAutoTrigger = {
    /**
     * - default next autotriggering time
     */
    defaultTime: number;
    /**
     * - type of next autotriggering
     */
    type: (0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9);
    /**
     * - next autotrigger in milliseconds
     */
    time: number;
    /**
     * - autotrigger TimeOut Object
     */
    timer?: NodeJS.Timeout;
};
/**
 * object for a rule condition
 */
export type IRuleCondition = {
    /**
     * - position of the condition
     */
    condition: number;
    /**
     * - description of the condition
     */
    conditionText?: string;
    /**
     * - first operand
     */
    value: string | number;
    /**
     * - first operand type
     */
    valueType: string;
    /**
     * - JSONATA expression
     */
    valueExpr?: Function;
    /**
     * - first operand description
     */
    valueName?: string;
    /**
     * - first operand description (short version)
     */
    valueNameShort?: string;
    /**
     * - opCallback value
     */
    valueWorth?: string;
    /**
     * - operator
     */
    operator: string;
    /**
     * - operator description
     */
    operatorText?: string;
    /**
     * - operator description enhanced
     */
    operatorDescription?: string;
    /**
     * - second operand
     */
    threshold: string;
    /**
     * - second operand type
     */
    thresholdType: string;
    /**
     * - JSONATA expression
     */
    thresholdExpr?: Function;
    /**
     * - second operand description
     */
    thresholdName?: string;
    /**
     * - second operand description (short version)
     */
    thresholdNameShort?: string;
    /**
     * - opCallback value
     */
    thresholdWorth?: string;
    /**
     * - comparision text
     */
    text?: string;
    /**
     * - comparision text (short version)
     */
    textShort?: string;
    /**
     * - result of the condition evaluation
     */
    result: boolean;
};
/**
 * object for a rule condition
 */
export type IRuleConditionResult = {
    /**
     * - selected condition index
     */
    index: number;
    /**
     * - comparision text
     */
    text?: string;
    /**
     * - comparision text (short version)
     */
    textShort?: string;
    /**
     * - result of the condition evaluation
     */
    result: boolean;
};
/**
 * object for a rule time definition
 */
export type IRuleTimeDefSingle = {
    /**
     * - time value
     */
    value: string;
    /**
     * - type of the time
     */
    type: string;
    /**
     * - time offset value
     */
    offset: string | number;
    /**
     * - time offset type
     */
    offsetType: string;
    /**
     * - time offset value
     */
    multiplier: number;
    /**
     * - time offset value
     */
    next: boolean;
    /**
     * - start time definition
     */
    now?: Date;
};
/**
 * object for a rule time definition
 */
export type IRuleTimeDef = {
    /**
     * - time value
     */
    value: string;
    /**
     * - type of the time
     */
    type: string;
    /**
     * - time offset value
     */
    offset: string | number;
    /**
     * - time offset type
     */
    offsetType: string;
    /**
     * - time offset value
     */
    multiplier: number;
    /**
     * - time offset value
     */
    next: boolean;
    /**
     * - start time definition
     */
    now?: Date;
    /**
     * - minimum limitation to the time
     */
    min?: IRuleTimeDefSingle;
    /**
     * - maximum limitation to the time
     */
    max?: IRuleTimeDefSingle;
};
/**
 * object for a rule time definition
 */
export type IRuleTimesDefInt = {
    /**
     * - start time definition
     */
    start?: IRuleTimeDef;
    /**
     * - end time definition
     */
    end?: IRuleTimeDef;
};
/**
 * object for a rule time definition
 */
export type IRuleTimesDef = ILimitationsObj & IRuleTimesDefInt;
/**
 * object for a rule time definition
 */
export type ITimePropertyResultInt = {
    /**
     * - time in milliseconds
     */
    ts: number;
    /**
     * - day id of the date
     */
    dayId: number;
    /**
     * - time representation
     */
    timeLocal?: string;
    /**
     * - time representation
     */
    timeLocalDate?: string;
    /**
     * - time representation
     */
    dateISO?: string;
    /**
     * - time representation
     */
    dateUTC?: string;
    /**
     * - source of the data if it comes from minimum or maximum limitation
     */
    source?: ('default' | 'min' | 'max');
};
/**
 * object for a rule time definition
 */
export type ITimePropResult = ITimePropertyResultInt & ITimePropertyResult;
/**
 * object for a rule time definition
 */
export type IRuleTimeDataDef = {
    /**
     * - start time definition
     */
    start?: ITimePropResult;
    /**
     * - end time definition
     */
    end?: ITimePropResult;
    /**
     * - start time definition
     */
    now?: number;
};
/**
 * object for a rule time definition
 */
export type IRuleTimeDataMinMaxDef = {
    /**
     * - start time definition
     */
    start?: ITimePropResult;
    /**
     * - end time definition
     */
    end?: ITimePropResult;
};
/**
 * object for a rule
 */
export type IRuleData = {
    /**
     * - defines if a rle is enabled or disabled
     */
    enabled: boolean;
    /**
     * - rule position
     */
    pos: number;
    /**
     * - name of the rule
     */
    name: string;
    /**
     * - executuion type of a rule which is defined
     */
    exec: number;
    /**
     * - executuion type of a rule which is used
     */
    execUse: number;
    /**
     * - overwrites reset
     */
    resetOverwrite: boolean;
    /**
     * - importance of the rule
     */
    importance: number;
    /**
     * - defines if the rule has conditions
     */
    conditional: boolean;
    /**
     * - conditions for a rule
     */
    conditions: Array<IRuleCondition>;
    /**
     * - condition resule
     */
    conditonResult: IRuleConditionResult;
    /**
     * - rule time Data
     */
    time?: IRuleTimesDef;
    /**
     * - object for storing time Data
     */
    timeResult?: IRuleTimeDataDef;
    /**
     * - object for storing time Data
     */
    timeResultMin?: IRuleTimeDataMinMaxDef;
    /**
     * - object for storing time Data
     */
    timeResultMax?: IRuleTimeDataMinMaxDef;
    /**
     * - rule time Data
     */
    payload?: any;
    /**
     * - rule time Data
     */
    level?: any;
    /**
     * - rule time Data
     */
    slat?: any;
    /**
     * - rule time Data
     */
    topic: string;
    /**
     * - rule time Data
     */
    outputValue?: any;
    /**
     * - rule time Data
     */
    outputType?: string;
};
/**
 * object for a rule result
 */
export type IRuleResultData = {
    /**
     * - index of selected rule
     */
    ruleindex: number;
    /**
     * - selected rule
     */
    ruleSel?: IRuleData;
    /**
     * - selected rule
     */
    ruleSlatOvs?: IRuleData;
    /**
     * - selected rule
     */
    ruleTopicOvs?: IRuleData;
    /**
     * - selected rule
     */
    ruleSelMin?: IRuleData;
    /**
     * - selected rule
     */
    ruleSelMax?: IRuleData;
    /**
     * - object for storing time Data
     */
    timeResult?: IRuleTimeDataDef;
    /**
     * - object for storing time Data
     */
    timeResultMin?: IRuleTimeDataDef;
    /**
     * - object for storing time Data
     */
    timeResultMax?: IRuleTimeDataDef;
};
/**
 * object for a rule
 */
export type IRulesData = {
    /**
     * - the rules itself
     */
    data: Array<IRuleData>;
    /**
     * - executuion type of a rule which is defined
     */
    count: number;
    /**
     * - last rule for first evaluation loop
     */
    last1stRun: number;
    /**
     * - maximum inportance of all rules
     */
    maxImportance: number;
    /**
     * - __true__ if any rule can overwrite reset
     */
    canResetOverwrite: boolean;
};
/**
 * object for a rule
 */
export type ISunData = {
    /**
     * - mode of the sun
     */
    mode: (0 | 1 | 3 | 16);
    /**
     * - maximum mode
     */
    modeMax: (0 | 1 | 3 | 16);
    /**
     * - floorLength value
     */
    floorLength: string;
    /**
     * - type of the floorLength
     */
    floorLengthType: string;
    /**
     * - timestamp of the next change
     */
    changeAgain: number;
    /**
     * - minimum delta
     */
    minDelta: number;
    /**
     * - rule time Data
     */
    level?: any;
    /**
     * - rule time Data
     */
    slat?: any;
    /**
     * - rule time Data
     */
    topic: string;
};
/**
 * Extensions for the nodeInstance object type
 */
export type ITimeControlNodeInstance = {
    /**
     * -   tbd
     */
    positionConfig: IPositionConfigNode;
    /**
     * internal used additional id
     */
    addId: string;
    /**
     * get/set generic Data of the node
     */
    nodeData: any;
    /**
     * -   tbd
     */
    reason: any;
    /**
     * -   used context store
     */
    contextStore: string;
    /**
     * -   definition of the rule Data
     */
    rules: IRulesData;
    /**
     * -   indicator if the Level is in reverse order
     */
    levelReverse?: boolean;
    /**
     * -   the sun data Object
     */
    sunData?: ISunData;
    /**
     * -   tbd
     */
    nowarn: any;
    /**
     * -   tbd
     */
    results: Array<any>;
    /**
     * autotrigger options
     */
    autoTrigger: IAutoTrigger;
    /**
     * -   tbd
     */
    startDelayTimeOut: any;
    /**
     * -   tbd
     */
    startDelayTimeOutObj: NodeJS.Timeout;
    /**
     * -   Overwrite Reset TimeOut Object
     * ... obviously there are more ...
     */
    timeOutObj: NodeJS.Timeout;
};
/**
 * Combine nodeInstance with additional, optional functions
 */
export type ITimeControlNode = ITimeControlNodeInstance & runtimeNode;
/******************************************************************************************/
/**
* Timestamp compare function
* @callback ICompareTimeStamp
* @param {number} timeStamp The timestamp which should be compared
* @returns {Boolean} return true if if the timestamp is valid, otherwise false
*/
/******************************************************************************************/
/**
 * Returns true if the given object is null or undefined. Otherwise, returns false.
 * @param {*} object    object to check
 * @returns {boolean}   true if the given object is null or undefined. Otherwise, returns false.
 */
export function isNullOrUndefined(object: any): boolean;
/**
 * evaluate temporary Data
 * @param {ITimeControlNode} node   node Data
 * @param {string} type  type of type input
 * @param {string} value  value of typeinput
 * @param {*} data  data to cache
 * @param {Object} tempData  object which holding the chached data
 * @returns {*}  data which was cached
 */
export function evalTempData(node: ITimeControlNode, type: string, value: string, data: any, tempData: any): any;
/**
* reset any existing override
* @param {ITimeControlNode} node node data
*/
export function posOverwriteReset(node: ITimeControlNode): void;
/**
* setup the expiring of n override or update an existing expiring
* @param {ITimeControlNode} node node data
* @param {ITimeObject} oNow the *current* date Object
* @param {number} dExpire the expiring time, (if it is NaN, default time will be tried to use) if it is not used, nor a Number or less than 1 no expiring activated
*/
export function setExpiringOverwrite(node: ITimeControlNode, oNow: ITimeObject, dExpire: number, reason: any): void;
/**
* check if an override can be reset
* @param {ITimeControlNode} node node data
* @param {Object} msg message object
* @param {ITimeObject} oNow the *current* date Object
*/
export function checkOverrideReset(node: ITimeControlNode, msg: any, oNow: ITimeObject, isSignificant: any): void;
/**
* setting the reason for override
* @param {ITimeControlNode} node node data
*/
export function setOverwriteReason(node: ITimeControlNode): boolean;
/******************************************************************************************/
/**
 * pre-checking conditions to may be able to store temp data
 * @param {ITimeControlNode} node node data
 * @param {Object} msg the message object
 * @param {Object} tempData the temporary storage object
 * @param {Date} dNow simple Date Object
 */
export function prepareRules(node: ITimeControlNode, msg: any, tempData: any, dNow: Date): void;
/**
 * get time constrainty of a rule
 * @param {ITimeControlNode} node node data
 * @param {Object} msg the message object
 * @param {IRuleData} rule the rule data
 * @param {('start'|'end')} timep rule type
 * @param {Date} dNow base timestamp
 * @param {number} def default value
 */
export function getRuleTimeData(node: ITimeControlNode, msg: any, rule: IRuleData, timep: ('start' | 'end'), dNow: Date, def: number): void;
/*************************************************************************************************************************/
/**
 * check if a level has a valid value
 * @param {ITimeControlNode} node the node data
 * @param {number} level the level to check
 * @returns {boolean} true if the level is valid, otherwise false
 */
export function validPosition(node: ITimeControlNode, level: number, allowRound: any): boolean;
/*************************************************************************************************************************/
/**
 * function to check a rule
 * @param {ITimeControlNode} node the node object
 * @param {Object} msg the message object
 * @param {IRuleData} rule a rule object to test
 * @param {ITimeObject} tData Now time object
 * @returns {IRuleData|null} returns the rule if rule is valid, otherwhise null
 */
export function compareRules(node: ITimeControlNode, msg: any, rule: IRuleData, tData: ITimeObject): IRuleData | null;
/******************************************************************************************/
/**
 * check all rules and determinate the active rule
 * @param {ITimeControlNode} node node data
 * @param {Object} msg the message object
 * @param {ITimeObject} oNow the *current* date Object
 * @param {Object} tempData the object storing the temporary caching data
 * @returns {IRuleResultData} the active rule or null
 */
export function getActiveRule(node: ITimeControlNode, msg: any, oNow: ITimeObject, tempData: any): IRuleResultData;
/**
 * initializes the node
 * @param {runtimeRED} REDLib the level to check
 * @param {ITimeControlNode} node the node data
 * @param {Object} config the level to check
 */
export function initializeCtrl(REDLib: runtimeRED, node: ITimeControlNode, config: any): void;
export namespace cRuleType {
    const absolute: number;
    const levelMinOversteer: number;
    const levelMaxOversteer: number;
    const slatOversteer: number;
    const topicOversteer: number;
    const off: number;
}
export const cRuleDefault: -1;
export const cRuleLogOperatorAnd: 2;
export const cRuleLogOperatorOr: 1;
//# sourceMappingURL=timeControlHelper.d.ts.map