import { Meta2d } from '../core';
import { IValue, Pen } from '../pen';
import { Network } from '../store';
export type EventValue = string | IValue | undefined | null;
export type EventName = 'enter' | 'leave' | 'active' | 'inactive' | 'click' | 'mousedown' | 'mouseup' | 'dblclick' | 'valueUpdate' | 'message' | 'contextmenu' | 'input' | 'change' | 'submit' | 'reset';
export interface Event {
    name: EventName;
    action: EventAction;
    where?: Where;
    value?: EventValue;
    params?: string;
    extend?: any;
    fn?: (pen: Pen, params: string, context?: {
        meta2d: Meta2d;
        eventName: string;
    }) => void;
    targetType?: string;
    network?: Network;
    actions?: Event[];
    conditions?: TriggerCondition[];
    conditionType?: string;
    message?: string;
    callback?: string;
    list?: {
        params?: string;
        value?: EventValue;
    }[];
    timeout?: number;
    confirm?: string;
    confirmTitle?: string;
    data?: {
        key?: string;
        value?: string;
        id?: string;
        prop?: string;
        class?: string;
        token?: string;
    }[];
}
export declare enum EventAction {
    Link = 0,
    SetProps = 1,
    StartAnimate = 2,
    PauseAnimate = 3,
    StopAnimate = 4,
    JS = 5,//Function
    GlobalFn = 6,
    Emit = 7,
    StartVideo = 8,
    PauseVideo = 9,
    StopVideo = 10,
    SendPropData = 11,
    SendVarData = 12,
    Navigator = 13,
    Dialog = 14,
    SendData = 15,//数据源选择
    PostMessage = 16,//发送场景数据
    PostMessageToParent = 17,//向父窗口发送消息
    Message = 18
}
export interface Where {
    type?: string | 'comparison';
    key?: string;
    comparison?: Comparison;
    value?: unknown;
    fn?: (pen: Pen, context?: {
        meta2d: Meta2d;
    }) => boolean;
    fnJs?: string;
}
/**
 * 触发器中的符号
 */
export type Comparison = '=' | '==' | '!=' | '>' | '<' | '>=' | '<=' | '[)' | '![)'
/**
 * 属于，类似于 数组的 includes
 * .. 属于范围语法，30..50 等价于 介于的 [30, 50]
 * [1, 2, 3]  2 // true  1.5 // false
 * [1,20,30..50,65] 1 // true 20 // true 30 // true 30.1 // true
 */
 | '[]' | '![]';
export interface TriggerCondition {
    type?: string;
    operator?: Comparison;
    valueType?: string;
    value?: string;
    target?: string;
    label?: string;
    fnJs?: string;
    fn?: (pen: Pen, context?: {
        meta2d: Meta2d;
    }) => boolean;
    key?: string;
    source?: string;
}
export interface Trigger {
    name?: string;
    conditionType?: string;
    conditions?: TriggerCondition[];
    actions?: Event[];
    status?: Trigger[];
}
export interface Bind {
    case?: string;
    id?: string;
    label?: string;
    class?: string;
    token?: string;
    compute_name?: string;
    deviceId?: string;
    key?: string;
}
export interface RealTime {
    label?: string;
    key?: string;
    type?: string;
    keywords?: true;
    triggers?: Trigger[];
    bind?: Bind;
    value?: string;
    enableMock?: boolean;
    mock?: any;
    productId?: string;
    deviceId?: string;
    propertyId?: string;
}
