import type { FirePointEffect, WarningPointEffect } from "./effects";
import type { ArrowFlowEffect, LightFlowEffect } from "./effects";
import type { FireAreaEffect, FenceAreaEffect } from "./effects";
import { REQUEST_TYPE } from ".";
import { CameraMoveDirection } from "../../../interface/camera";
/**
 * @description 设置到 Unity 的颜色
 * - 这些颜色的取值范围是 [0, 1]
 */
export interface UnityColor {
    R: number;
    G: number;
    B: number;
    A: number;
}
/**
 * @description 设置到 Unity 的坐标
 * - 这个是世界坐标系下的坐标
 */
export interface UnityPosition {
    X: number;
    Y: number;
    Z: number;
}
export interface UnitySmPosition {
    x: number;
    y: number;
    z: number;
}
export declare enum ObjectViewMode {
    "Normal" = "Normal",
    "WireFrame" = "WireFrame",
    "Transparent" = "Transparent",
    "WireAndTransparent" = "WireAndTransparent"
}
/**
 * 具体类型见文档
 * @see https://docs.qq.com/doc/DRmFKQ0RYUE91TmVq
 */
/**
 * @description `请求与应答` 的请求体
 */
export interface RequestData {
    [REQUEST_TYPE.GetCameraLookAtPosition]: null;
    [REQUEST_TYPE.GetSceneMeta]: null;
    [REQUEST_TYPE.RemoveSceneObject]: null;
    [REQUEST_TYPE.MoveCamera]: {
        /**
         * @description 移动方向，左、右、上、下、前、后
         */
        MoveDirection: CameraMoveDirection;
        Offset: number;
        Duration: number;
    };
    [REQUEST_TYPE.ConvertToScreenPosition]: {
        worldPosition: {
            X: number;
            Y: number;
            Z: number;
        };
    };
    [REQUEST_TYPE.Convert2WorldPosition]: null;
    [REQUEST_TYPE.RefreshWebPageEvent]: null;
    [REQUEST_TYPE.GetCameraTransform]: null;
    [REQUEST_TYPE.Mouse3DPositionControl]: null;
    [REQUEST_TYPE.SetObjectIconByClasses]: null;
    [REQUEST_TYPE.GetAllObjectClasses]: null;
    [REQUEST_TYPE.ResetScene]: null;
    [REQUEST_TYPE.SubscribeNotification]: {
        NotificationTypes: string[];
    };
    [REQUEST_TYPE.GetAllObjectClasses]: null;
    [REQUEST_TYPE.SetTimeOfDay]: {
        /**
         * @description 浮点型，不可空。 表示一天的小时数，取值范围为 [0, 24)
         */
        TimeOfDay: number;
    };
    [REQUEST_TYPE.SetWeatherState]: {
        /**
         * - 0：晴
         * - 1：少云
         * - 2：多云
         */
        CloudState: 0 | 1 | 2;
        /**
         * - 0：无雨
         * - 1：小雨
         * - 2：大雨
         */
        RainState: 0 | 1 | 2;
        /**
         * - 0：无雪
         * - 1：小雪
         * - 2：大雪
         */
        SnowState: 0 | 1 | 2;
        /**
         * - true：开启音效
         * - false：关闭音效
         */
        Sound: boolean;
    };
    [REQUEST_TYPE.SetEnvironmentSoundVolume]: {
        /**
         * @description 音量大小，取值范围 [0-1]
         */
        Volume: number;
    };
    [REQUEST_TYPE.SetEffects]: {
        /**
         * @description 是否显示面状特效
         */
        ShowAreaEffects: boolean;
        /**
         * @description 是否显示线状特效
         */
        ShowLineEffects: boolean;
        /**
         * @description 是否显示点状特效
         */
        ShowPointEffects: boolean;
    };
    [REQUEST_TYPE.GoIntoSpace]: {
        /**
         * @description 需要进入的空间 id，如果空间已与数字空间作了绑定，则为数字空间的 id.
         */
        SpaceId: string;
        /**
         * @description 场景进入空间的过渡动画时间，单位: 秒
         */
        Duration: number;
    };
    [REQUEST_TYPE.SetRoomApperance]: {
        RoomIds: string[];
        /**
         * @description 要设置的颜色值
         */
        Color?: UnityColor;
        /**
         * @description 要设置的空间高度
         */
        Height?: number;
    };
    [REQUEST_TYPE.SetColorOfRoom]: {
        RoomId: string;
        Color: UnityColor;
    };
    [REQUEST_TYPE.StopCameraAnimation]: null;
    [REQUEST_TYPE.ChangeViewPoint]: {
        /**
         * @description 一个三维向量，要设置的目标位置
         */
        Position: UnityPosition;
        /**
         * @description 一个三维向量，要设置的相机的目标角度的欧拉角值
         */
        EulerAngles: UnityPosition;
        /**
         * @description 场景进入空间的过渡动画时间，单位: 秒
         */
        Duration: number;
        /**
         * 相机位置距离视点的距离
         */
        Distance: number;
    };
    [REQUEST_TYPE.CameraFllowTargetObject]: {
        ObjectId: string;
        RelativePosition: UnityPosition;
        RelativeEulerAngles: UnityPosition;
    };
    [REQUEST_TYPE.SetCameraControlerType]: {
        /**
         * @description 控制方式
         * - 0-三维地图方式
         * - 1-第一人称视角方式
         * - 2-第三人称视角方式
         */
        ControlerType: 0 | 1 | 2;
    };
    [REQUEST_TYPE.GetTransform]: {
        ObjectId: string;
    };
    [REQUEST_TYPE.SetTransform]: {
        ObjectId: string;
        Position: UnityPosition;
        EulerAngles: UnityPosition;
        Scale: UnityPosition;
        /**
         * @description 插值用时（秒），当该字段不传时，不插值
         */
        Duration?: number;
    };
    [REQUEST_TYPE.GetVisibility]: {
        ObjectId: string;
    };
    [REQUEST_TYPE.SetVisibility]: {
        ObjectIds: string[];
        Visible: boolean;
    };
    [REQUEST_TYPE.GetInteractive]: {
        ObjectId: string;
    };
    [REQUEST_TYPE.SetInteractive]: {
        ObjectIds: string[];
        Interactive: boolean;
    };
    [REQUEST_TYPE.SetObjectEffects]: {
        ObjectIds: string[];
        /**
         * @description 可缺，设置弹跳动效的参数
         */
        JumpEffect?: {
            /**
             * @description 是否启用该动效
             */
            Active: boolean;
            Params: {
                /**
                 * @description 向上跳的偏移比例
                 */
                YOffsetRatio: number;
                /**
                 * @description 跳动一次的时间
                 */
                Duration: number;
                /**
                 * @description 为负数时，表示无限循环
                 */
                RepeatCount: number;
            };
        };
        /**
         * @description 可缺，设置缩放动画
         */
        ScaleEffect?: {
            /**
             * @description 是否启用该动效
             */
            Active: boolean;
            Params: {
                /**
                 * @description 开始的缩放比例
                 */
                ScaleFromRatio: number;
                /**
                 * @description 终点的缩放比例
                 */
                ScaleToRatio: number;
                /**
                 * @description 缩放一次的时间
                 */
                Duration: number;
                /**
                 * @description 为负数时，表示无限循环
                 */
                RepeatCount: number;
            };
        };
        /**
         * @description 可缺，设置发光特效
         */
        GlowEffect?: {
            /**
             * @description 是否启用该动效
             */
            Active: boolean;
            Params: {
                /**
                 * @description 光的强度
                 */
                Intensity?: number;
                /**
                 * @description 光的总体宽度
                 */
                Width?: number;
                /**
                 * @description 光的颜色
                 */
                Color?: UnityColor;
                /**
                 * @description 持续时间，单位 "秒"
                 */
                Duration?: number;
                /**
                 * @description 动效的延时，单位 "秒"
                 */
                Overlay?: boolean;
            };
        };
        /**
         * @description 可缺，设置燃烧特效
         */
        BurnEffect?: {
            /**
             * @description 是否启用该动效
             */
            Active: boolean;
            Params: {
                /**
                 * @description 燃烧火焰的大小，浮点数
                 */
                Size?: number;
                /**
                 * @description 火焰密度，浮点数
                 */
                Density?: number;
            };
        };
        /**
         * @description 可缺，呼吸发光特效
         */
        BreathGlowEffect: {
            Active: boolean;
            Params: {
                /**
                 * @description 发光强度
                 */
                Intensity?: number;
                /**
                 * @description 发光频率（每秒多少次）
                 */
                Frequency?: number;
                /**
                 * @description 发光颜色
                 */
                Color?: UnityColor;
            };
        };
        /**
         * @description 可缺，设置告警特效
         */
        WarningEffect: {
            Active: boolean;
            Params: {
                Size: number;
                OffestY: number;
                Intensity: number;
                Color: UnityColor;
            };
        };
    };
    [REQUEST_TYPE.FocusToTargetObject]: {
        /**
         * @description 目标物体 Id
         */
        ObjectId: string;
        /**
         * @description 场景进入空间的过渡动画时间，单位: 秒
         */
        Duration: number;
        /**
         * @description 俯仰角，取值范围 [-90, 90]
         * - 负数为仰视，正数为俯视，不填则使用默认值
         */
        AngleOfPitch?: number;
        /**
         * @description 缩放自动计算的聚焦距离
         * - 不填则使用默认值
         */
        DistanceScale: number;
    };
    [REQUEST_TYPE.HightlightTargetObject]: {
        /**
         * @description 目标物体 Id 数组
         */
        ObjectIds: string[];
        /**
         * @description 是否高亮
         * - `true`: 高亮
         * - `false`: 取消高亮
         */
        Active: boolean;
    };
    [REQUEST_TYPE.SetVisibilityOfObjectIcon]: {
        /**
         * @description 当 ObjectIds 值为 _null_ 时，表示取场景中所有的物体的 _id_
         */
        ObjectIds: null | string;
        Visible: boolean;
    };
    [REQUEST_TYPE.SetObjectInteractivity]: {
        /**
         * @description 目标 Class 数组
         * - 当 Classes 为 null 时，表示选择所有类型的物体
         */
        Classes: string[] | null;
    };
    [REQUEST_TYPE.FilterObjects]: {
        /**
         * @description 目标 Class 数组
         * - 当 Classes 为 null 时，表示选择所有类型的物体
         */
        Classes: string[] | null;
    };
    [REQUEST_TYPE.ObjectIconControl]: {
        /**
         * @description 目标 Class 数组
         * - 当 Classes 为 null 时，表示选择所有类型的物体
         */
        Classes: string[] | null;
        /**
         * @description 是否显示 Icon
         * - `true`: 显示
         * - `false`: 隐藏
         */
        Active: boolean;
    };
    [REQUEST_TYPE.HoverAroundTarget]: {
        /**
         * @description 目标物体 Id
         */
        ObjectId: string;
        Position: {
            X: number;
            Y: number;
            Z: number;
        };
        /**
         * @description 表示盘旋一周需要的时间，单位: 秒
         */
        Time: number;
        /**
         * @description 开始或停止旋转
         * - `true`: 开始盘旋动画
         * - `false`: 停止盘旋动画
         */
        Active: boolean;
    };
    [REQUEST_TYPE.UpdateIoTState]: {
        id: string;
        name: string;
        driver: string;
        hierarchy: string;
        /**
         * 详情见文档
         */
        [key: string]: any;
    };
    [REQUEST_TYPE.BatchUpdateIoTState]: RequestData[REQUEST_TYPE.UpdateIoTState][];
    [REQUEST_TYPE.ObjectInfoPanelControl]: {
        /**
         * @description 目标物体 Id
         */
        ObjectId: string;
        /**
         * @description 打开或关闭信息面板
         * - `true`: 打开面板
         * - `false`: 关闭面板
         */
        Active: boolean;
    };
    [REQUEST_TYPE.CreatHeatMap]: {
        /**
         * @description 热力图名称
         */
        Name: string;
        Visible: boolean;
        Extent: {
            /**
             * @description 数据坐标系
             * - WGS84：经纬度坐标
             * - World: 世界空间坐标
             */
            SpaceRefernce: "WGS84" | "World";
            /**
             * @description 热力图区域左上角坐标
             */
            Min: UnityPosition;
            /**
             * @description 热力图区域右下角坐标
             */
            Max: UnityPosition;
        };
        Setting: {
            /**
             * @description 热力点半径
             */
            Radius: number;
            /**
             * @description 热力点强度
             */
            Intensity: number;
            /**
             * @description 热力图高度
             */
            Height: number;
            /**
             * @description 热力图全局透明度
             */
            Alpha: number;
            /**
             * @description 热力图模式
             * - 0：自定义。根据 Color0-Color5 自定义颜色显示热力图
             * - 1：模板。颜色使用模板值
             */
            Mode: 0 | 1;
            /**
             * @description 热力图渲染模式
             * - 0：半透明
             * - 1：不透明
             */
            RenderType: 0 | 1;
            /**
             * @description 热力图从里到外颜色变化 RGBA 颜色值在(0-1)
             */
            Color0: UnityColor;
            /**
             * @description 热力图从里到外颜色变化 RGBA 颜色值在(0-1)
             */
            Color1: UnityColor;
            /**
             * @description 热力图从里到外颜色变化 RGBA 颜色值在(0-1)
             */
            Color2: UnityColor;
            /**
             * @description 热力图从里到外颜色变化 RGBA 颜色值在(0-1)
             */
            Color3: UnityColor;
            /**
             * @description 热力图从里到外颜色变化 RGBA 颜色值在(0-1)
             */
            Color4: UnityColor;
            /**
             * @description 热力图从里到外颜色变化 RGBA 颜色值在(0-1)
             */
            Color5: UnityColor;
            /**
             * @description 热力图颜色过度值，取值范围为 [0-1]
             * - 0 为没有过度
             * - 1 为最大过度
             */
            ColorLerpValue: number;
        };
    };
    [REQUEST_TYPE.CreatHeatMapNew]: {
        /**
         * @description 热力图名称
         */
        Name: string;
        Visible: boolean;
        PosData: {
            /**
             * @description 数据坐标系
             * - WGS84：经纬度坐标
             * - World: 世界空间坐标
             */
            SpaceRefernce: "WGS84" | "World";
            /**
             * @description 所有热力点坐标数据
             */
            Data: (UnitySmPosition & {
                w: number;
            })[];
        };
        Setting: {
            /**
             * @description 热力点半径
             */
            Radius: number;
            /**
             * @description 热力点强度
             */
            Intensity: number;
            /**
             * @description 热力图高度
             */
            Height: number;
            /**
             * @description 热力图全局透明度
             */
            Alpha: number;
            /**
             * @description 热力图模式
             * - 0：自定义。根据 Color0-Color5 自定义颜色显示热力图
             * - 1：模板。颜色使用模板值
             */
            Mode: 0 | 1;
            /**
             * @description 热力图渲染模式
             * - 0：半透明
             * - 1：不透明
             */
            RenderType: 0 | 1;
            /**
             * @description 热力图从里到外颜色变化 RGBA 颜色值在(0-1)
             */
            Color0: UnityColor;
            /**
             * @description 热力图从里到外颜色变化 RGBA 颜色值在(0-1)
             */
            Color1: UnityColor;
            /**
             * @description 热力图从里到外颜色变化 RGBA 颜色值在(0-1)
             */
            Color2: UnityColor;
            /**
             * @description 热力图从里到外颜色变化 RGBA 颜色值在(0-1)
             */
            Color3: UnityColor;
            /**
             * @description 热力图从里到外颜色变化 RGBA 颜色值在(0-1)
             */
            Color4: UnityColor;
            /**
             * @description 热力图从里到外颜色变化 RGBA 颜色值在(0-1)
             */
            Color5: UnityColor;
            /**
             * @description 热力图颜色过度值，取值范围为 [0-1]
             * - 0 为没有过度
             * - 1 为最大过度
             */
            ColorLerpValue: number;
        };
    };
    [REQUEST_TYPE.UpdateHeatMapData]: {
        /**
         * @description 热力图ID（创建热力图时返回的guid值）
         */
        Id: string;
        PosData: {
            /**
             * @description 数据坐标系
             * - WGS84：经纬度坐标
             * - World: 世界空间坐标
             */
            SpaceRefernce: "WGS84" | "World";
            /**
             * ! 注意：这个字段名和创建时不一样
             */
            Data: RequestData[REQUEST_TYPE.CreatHeatMapNew]["PosData"]["Data"];
        };
    };
    [REQUEST_TYPE.UpdateHeatMapSetting]: RequestData[REQUEST_TYPE.CreatHeatMapNew]["Setting"] & {
        /**
         * @description 热力图ID（创建热力图时返回的ID值）
         */
        Id: string;
    };
    [REQUEST_TYPE.RemoveHeatMap]: {
        Ids: string[];
    };
    [REQUEST_TYPE.SetHeatMapVisiblity]: {
        Ids: string[];
        Visible: boolean;
    };
    [REQUEST_TYPE.SetObjectIconById]: {
        /**
         * @description 目标物体Id
         */
        ObjectId: string;
        /**
         * @description 缩放Icon
         */
        Scale?: number;
        /**
         * @description 设置Icon水滴背景颜色
         */
        BackgroundColor?: UnityColor;
        /**
         * @description 不激活状态图片下载地址
         */
        Url_Normal?: string;
        /**
         * @description 激活状态图片下载地址
         */
        Url_Highlight?: string;
    };
    [REQUEST_TYPE.CreatFireArea]: {
        /**
         * @description 自定义区域名字
         */
        Name: string;
        PosData: {
            /**
             * @description 数据坐标系
             * - WGS84：经纬度坐标
             * - World: 世界空间坐标
             */
            SpaceRefernce: "WGS84" | "World";
            /**
             * @description 点的位置
             * - WGS84: x-经度, y-纬度, z-高度（高度会决定特效生成的高度）
             * - World: 三维坐标位置, y 表示高度（高度会决定特效生成的高度）
             */
            Data: UnityPosition[];
        };
        /**
         * @description 浮点数, 火焰密度
         */
        Density: number;
        /**
         * @description 火焰高度
         */
        Height: number;
        /**
         * @description 浮点数, 火焰大小
         */
        Size: number;
    };
    [REQUEST_TYPE.DeleteFireArea]: {
        Ids: string[];
    };
    [REQUEST_TYPE.UpdateFireArea]: {
        Id: string;
    } & Omit<RequestData[REQUEST_TYPE.CreatFireArea], "Name" | "PosData">;
    [REQUEST_TYPE.SetFireAreaVisiblity]: {
        Ids: string[];
    };
    [REQUEST_TYPE.CreatPointEffect]: FirePointEffect | WarningPointEffect;
    [REQUEST_TYPE.RemovePointEffect]: {
        Ids: string[];
    };
    [REQUEST_TYPE.CreatLineEffect]: LightFlowEffect | ArrowFlowEffect;
    [REQUEST_TYPE.RemoveLineEffect]: {
        Ids: string[];
    };
    [REQUEST_TYPE.CreatAreaEffect]: FireAreaEffect | FenceAreaEffect;
    [REQUEST_TYPE.RemoveAreaEffect]: {
        Ids: string[];
    };
    [REQUEST_TYPE.SetObjectsViewMode]: {
        ObjectIds: string[];
        ViewMode: keyof typeof ObjectViewMode;
        Setting: {
            Color: UnityColor;
            Thickness: number;
        };
    };
    [REQUEST_TYPE.RemoveCustomObject]: {
        ObjectIds: string[];
    };
    [REQUEST_TYPE.AddCustomObject]: {
        SpaceId?: string;
        ContentType: number;
        ObjectName: string;
        Classes: string[];
        Content: string;
        Position: UnityPosition;
        Rotation: UnityPosition;
        Scale: UnityPosition;
        AnchorOffset: UnityPosition;
        FontSize: number;
        FontColor: UnityColor;
        KeepFaceToCamera: boolean;
    };
    [REQUEST_TYPE.DisplayWeb3DUI]: {
        Width: number;
        Height: number;
        Scale: number;
        Pivot: {
            X: number;
            Y: number;
        };
        Position: {
            X: number;
            Y: number;
            Z: number;
        };
        HtmlContent: string;
    };
    [REQUEST_TYPE.HideWeb3DUI]: null;
    [REQUEST_TYPE.UnsubscribeNotification]: {
        NotificationTypes: string[];
    };
    [REQUEST_TYPE.CreatTemperatureMap]: {
        /**
         * @description 温度图名称
         */
        Name: string;
        PosData: {
            /**
             * @description 数据坐标系
             * - WGS84：经纬度坐标
             * - World: 世界空间坐标
             */
            SpaceRefernce: "WGS84" | "World";
            /**
             * @description 数据
             */
            Data: Array<unknown>;
        };
        Setting: {
            /**
             * @description 热力点半径
             */
            GlobleRadius: number;
            /**
             * @description 热力点强度
             */
            Height: number;
            /**
             * @description 热力图高度
             */
            Transparent: number;
            /**
             * @description 温度图颜色值
             */
            TemperatrueColor: Array<unknown>;
        };
    };
    [REQUEST_TYPE.RemoveTemperatureMap]: {
        Ids: string[];
    };
    [REQUEST_TYPE.UpdateTemperatureData]: {
        Id: string;
        PosData: {
            /**
             * @description 数据坐标系
             * - WGS84：经纬度坐标
             * - World: 世界空间坐标
             */
            SpaceRefernce: "WGS84" | "World";
            /**
             * @description 数据
             */
            Data: Array<unknown>;
        };
    };
    [REQUEST_TYPE.SetTemperatureMapVisiblity]: {
        Ids: string[];
        Visible: boolean;
    };
    [REQUEST_TYPE.CreatSegmentDefenceWallEffect]: {
        SpaceID: string;
        SegmentDefenceWalls: Array<unknown>;
        GlobleSetting: {
            Size: number;
            WireThickness: number;
            Intensity: number;
            Height: number;
            BreakpointWidth: number;
            BreakpointLength: number;
        };
    };
    [REQUEST_TYPE.RemoveSegmentDefeceWallEffect]: {
        Ids: string[];
    };
    [REQUEST_TYPE.UpdateSegmentDefeceWallEffect]: {
        SegemntInfos: Array<unknown>;
    };
}
