export interface IHilink<T = Function> {
    /**
     * 从本地查询设备状态
     * @param devId 表示设备的服务ID ，取值详见Device Partner平台的Profile中的定义。
     * @param json_body
     * @param resultCallback
     */
    getDevCacheAll(devId: "0", json_body: string, cb: T): void;
    /**
     * 从云侧查询设备状态
     * @param devId
     * @param sid 表示设备的服务ID ，取值详见Device Partner平台的Profile中的定义。
     * @param json_body
     * @param resultCallback
     */
    getDevInfo(devId: "0", sid: string, json_body: string, cb: T): void;
    /**
     * 从云侧查询设备状态（支持LUA脚本）
     * @param devId
     * @param sid 表示设备的服务ID ，取值详见Device Partner平台的Profile中的定义。
     * @param json_body
     * 如果需要查询该sid下的所有属性值，json_body取值为空即可。
     * 如果需要查询该sid下的部分属性值，json_body取值应包含所需查询的characteristicName的取值。例如：
     * JSON.stringify(["version","introduction"])。
     * @param resultCallback
     *  function resultCallback(resultStr){
          var result = resultStr; // 请求的返回结果
        }
     * hilink.getDevInfoWithProdId("0", sid, cid, "resultCallback");
     */
    getDevInfoWithProdId(devId: "0", sid: string, json_body: string, cb: T): void;
    /**
     * 下发命令到设备（带单个sid）
     * @param devId
     * @param json_body JSON.stringify({sid1: {on: 1, action: 1}}); json_body不能为空，否则将导致失败
     * @param resultCallback
     */
    setDeviceInfo(devId: "0", json_body: string, cb: T): void;
    /**
     * 下发命令到设备（带多个sid）
     * @param devId
     * @param json_body json_body不能为空，否则将导致失败
     * var json_body = JSON.stringify({
     *   sid1: {on1: 1, action1: 1},
     * );
     * @param isParallel true：并行下发 false：串行下发
     * @param isWaitAll true：当所有命令下发成功，才会回调返回结果 false：只要有一个命令下发成功，就会回调返回结果
     * @param resultCallback
     */
    setMultipleDeviceInfo(devId: string, json_body: string, isParallel: string, isWaitAll: string, cb: T): void;
    /**
     * 下发命令到设备（支持LUA脚本）
     * @param devId
     * @param json_body json_body不能为空，否则将导致失败
     * var json_body = JSON.stringify({
     *   sid1: {on1: 1, action1: 1},
     * );
     * @param resultCallback
     */
    setDeviceInfoWithProdId(devId: string, json_body: string, cb: T): void;
    /**
     * 下发命令到设备（长按控制）
     * @param devId
     * @param json_body json_body不能为空，否则将导致失败
     * var json_body = JSON.stringify({
     *   sid1: {on1: 1, action1: 1},
     * );
     * @param resultCallback
     * @param isLongPressInProgress true：长按命令开始执行 false：长按命令结束
     */
    setLongPressDeviceInfo(devId: string, json_body: string, cb: T, isLongPressInProgress: boolean): void;
    /**
     * 下发命令到设备（循环控制）
     * @param devId
     * @param serivceId 服务ID
     * @param json_body json_body不能为空，否则将导致失败
     * var json_body = JSON.stringify({
     *   sid1: {on1: 1, action1: 1},
     * );
     * @param loopFlag 是否重复循环。 "1"：是。 "0" ：否。
     * @param intervalTime 间隔时间，单位为ms
     * @param resultCallback
     */
    setDeviceServiceLoop(devId: string, serivceId: string, json_body: string, loopFlag: string, intervalTime: string, cb: T): void;
    /**
     * 下发命令到设备（无回调控制）
     * @param devId
     * @param json_body json_body不能为空，否则将导致失败
     * var json_body = JSON.stringify({
     *   sid1: {on1: 1, action1: 1},
     * );
     */
    setDeviceInfoWithoutCallback(devId: "0", json_body: string): void;
    /**
     * 查询设备历史记录
     * @param devId
     * @param pageNo 返回的页码数，缺省为0
     * @param pageSize 每页的数据个数，缺省为10
     * @param startTime 历史记录开始的UTC（世界标准时间）时间 yyyyMMddTHHmmssZ
     * @param endTime 历史记录结束的UTC（世界标准时间）时间 yyyyMMddTHHmmssZ
     * @param sid 设备的service id Profile
     * @param character 设备的characteristicName Profile
     * @param cb JS回调。
     */
    getDevHistory(devId: string, pageNo: number, pageSize: number, startTime: string, endTime: string, sid: string, character: string, cb: T): void;
    /**
     * 删除设备历史记录
     * @param devId
     * @param serviceId 设备的service id
     * @param cursor 查询的游标，缺省时为null
     * @param json_body
     */
    deleteDeviceHistory(devId: "0", serviceId: string, cursor: string | null, json_body: string): void;
    /**
     * 设备一键注册 - android
     * @param json_body
     * @param resultCallback
     */
    registerInfraredHubDevice(json_body: string, cb: T): void;
    /**
     * 设备一键注册 - ios
     * @param json_body
     * @param resultCallback
     */
    regiterInfraredHubDevice(json_body: string, cb: T): void;
    /**
     * 设备一键注销
     * @param devId
     * @param resultCallback
     */
    deleteInfraredHubDevice(devId: "0", cb: T): void;
    /**
     * 上报扩展数据
     * @param json_body
     * @param resultCallback
     */
    postDeviceExtendData(json_body: string, cb: T): void;
    /**
     * 上报扩展数据（带devId）
     * @param devId
     * @param resultCallback
     */
    postDeviceExtendDataById(devId: string, cb: T): void;
    /**
     * 查询扩展数据
     * @param type
     * @param resultCallback
     */
    getDeviceExtendData(type: string, cb: T): void;
    /**
     *
     * @param json_body
     * @param resultCallback
     */
    getDeviceExtendDataById(json_body: string, cb: T): void;
    /**
     * 删除扩展数据
     * @param type
     * @param resultCallback
     */
    deleteDeviceExtendData(type: string, cb: T): void;
    /**
     * 删除扩展数据（带devId）
     * @param devId
     * @param type
     * @param resultCallback
     */
    deleteDeviceExtendDataById(devId: string, type: string, cb: T): void;
    /**
     * 上报设备状态数据
     * @param devId
     * @param json_body
     * @param resultCallback
     */
    reportDeviceProfileImpermanency(devId: "0", json_body: string, cb: T): void;
    /**
     * 删除当前设备
     * @param isAssociate
     * @param resultCallback
     */
    deleteDevice(isAssociate: string, cb: T): void;
    /**
     * 修改设备名称
     * @param deviceName
     * @param resultCallback
     */
    modifyDeviceName(deviceName: string, cb: T): void;
    /**
     * 修改设备所处房间
     * @param chooseRoomString
     * @param resultCallback
     */
    modifyDeviceRoomName(chooseRoomString: string, cb: T): void;
    /**
     * 从本地查询设备静态信息
     * @param resultCallback
     */
    getDeviceInfo(cb: T): void;
    /**
     * 上传设备文件
     * @param file
     * @param additionInfo
     * @param callback
     */
    uploadObjectReq(file: string, additionInfo: string, cb: T): void;
    /**
     * 查询设备文件
     * @param request
     * @param callback
     */
    downloadObjectReq(request: string, cb: T): void;
    /**
     * 删除设备文件
     * @param request
     * @param callback
     */
    deleteObjectReq(request: string, cb: T): void;
    /**
     * 查询用户列表
     * @param devId
     * @param callback
     */
    getUserList(devId: string, cb: T): void;
    /**
     * 添加用户信息
     * @param userInfo
     * @param callback
     */
    setUserList(userInfo: string, cb: T): void;
    /**
     * 更新用户信息
     * @param userInfo
     * @param callback
     */
    updateUserList(userInfo: string, cb: T): void;
    /**
     * 查询设备状态上报的统计数据
     * @param devId
     * @param request
     * @param callback
     */
    getDevStatisticsDataWithQuery(devId: string, request: string, cb: T): void;
    /**
     * 查询设备状态上报统计数据（标量）
     * @param devId
     * @param serviceId
     * @param characteristicName
     * @param callback
     */
    getDevScalarData(devId: string, serviceId: string, characteristicName: string, cb: T): void;
    /**
     * 查询设备的Profile信息
     * @param callback
     */
    getDeviceProfile(cb: T): void;
    /**
     * 查询网桥子设备列表
     * @param callback
     */
    getBridgeSubclassRegisteredDevices(cb: T): void;
    /**
     * 查询设备的H5 URL地址
     * @param productId
     * @param callback
     */
    getSubDeviceUrl(productId: string, cb: T): void;
    /**
     * 查询设备与路由的连接关系
     * @param deviceId
     * @param callback
     */
    getHilinkConnection(deviceId: string, cb: T): void;
    /**
     * 从云端查询设备快照
     * @param deviceId
     * @param extendData
     * @param callback
     */
    getDevInfoAll(deviceId: string, extendData: string, cb: T): void;
    /**
     * 查询房间列表信息
     * @param callback
     */
    getRoomList(cb: T): void;
    /**
     * 查询规则（根据过滤条件）
     * @param condition
     * @param callback
     */
    getRules(condition: string, cb: T): void;
    /**
     * 查询规则（根据ruleID）
     * @param ruleId
     * @param callback
     */
    getSingleRule(ruleId: string, cb: T): void;
    /**
     * 创建规则
     * @param rule
     * @param callback
     */
    createRule(rule: string, cb: T): void;
    /**
     * 修改规则
     * @param rule
     * @param callback
     */
    updateRule(rule: string, cb: T): void;
    /**
     * 删除多个规则
     */
    deleteRules(ruleIds: string, cb: T): void;
    /**
     * 删除单个规则
     * @param ruleId
     * @param callback
     */
    deleteSingleRule(ruleId: string, cb: T): void;
    /**
     * 控制单个规则的激活状态
     * @param ruleId
     * @param active
     * @param resultCallback
     */
    controlRuleActive(ruleId: string, active: string, cb: T): void;
    /**
     * 查询规则执行日志
     * @param cursor
     * @param pageSize
     * @param startTime
     * @param endTime
     * @param resultCallback
     */
    getDeviceRuleEvents(cursor: string, pageSize: string, startTime: string, endTime: string, cb: T): void;
    /**
     * 查询设备为触发条件的智能场景数量
     * @param resultCallback
     */
    getAutoRuleSize(cb: T): void;
    /**
     * 跳转至华为商城产品页面
     * @param suffix
     */
    gotoVmall(suffix: string): void;
    /**
     * 跳转至Native页面
     * @param typeString
     * @param callback
     */
    gotoNative(typeString: string, cb: T): void;
    jumpTo(uri: string, cb: T): void;
    /**
     * 跳转至定时器页面
     * @param uri
     * @param resultCallback
     */
    jumpTo(uri: "com.huawei.smarthome.timerPage", cb: T): void;
    /**
     * 拉起倒计时弹窗
     */
    showDelayInfoDialog(): void;
    /**
     * 跳转至设备信息页面
     * @param uri
     * @param resultCallback
     */
    jumpTo(uri: "com.huawei.smarthome.deviceinfoactivity", cb: T): void;
    /**
     * 跳转至设备网络信息页面
     * @param uri
     * @param resultCallback
     */
    jumpTo(uri: "com.huawei.smarthome.deviceNetinfoActivity", cb: T): void;
    /**
     * 跳转至门锁匹配页面
     * @param uri
     * @param resultCallback
     */
    jumpTo(uri: "com.huawei.smarthome.addSmartlockActivity", cb: T): void;
    /**
     * 跳转至设备设置页面
     * @param uri
     * @param resultCallback
     */
    jumpTo(uri: "com.huawei.smarthome.deviceSettingActivity", cb: T): void;
    /**
     * 跳转设备离线页面
     * @param deviceId
     * @param hotline
     * @param resultCallback
     */
    jumpToOfflineHelpActivity(deviceId: string, hotline: string, cb: T): void;
    /**
     * 跳转到设备离线帮助页面（自定义离线帮助信息）
     * @param deviceId
     * @param message
     * @param resultCallback
     */
    jumpToSelfOfflineHelpActivity(deviceId: string, message: string, cb: T): void;
    /**
     * 跳转至其他App
     * @param packageName
     * @param resultCallback
     */
    startApp(packageName: string, cb: T): void;
    /**
     * 网桥跳转到子设备页面
     * @param listCount
     * @param resultCallback
     */
    jumpToH5Device(listCount: number, cb: T): void;
    /**
     * 调整标题栏
     * @param uri true，标题栏及状态栏文字白色，false标题栏及状态栏文字黑色
     * @param argb ARGB背景色值，目前已无作用
     * @param resultCallback
     */
    modifyTitleBar(uri: boolean, argb: string, cb: T): void;
    /**
     * 设置标题栏能否点击
     * @param uri
     * @param resultCallback
     */
    setTitleEnable(uri: boolean, cb: T): void;
    /**
     * 设置标题栏是否可见
     * @param uri
     * @param resultCallback
     */
    setTitleVisible(uri: boolean, cb: T): void;
    /**
     * 添加覆盖提示
     * @param json_body
     * JSON.stringify
     * {
        "type": 24 // 自定义int值
        "key": 1  // 目前请均传值1
        "icon": 1 // 覆盖消息前图标的编号，可以为Null，可传值为数组对应角标，参考下图
        "color": 0 // 字体颜色编号，可以为null，可传值为数组对应角标，可传值见下图
        "msg": "ssssss" // 需要显示的信息
     * }
     * @param resultCallback
     */
    addMessage(json_body: string, cb: T): void;
    /**
     * 移除覆盖提示
     * @param json_body
     * @param resultCallback
     */
    removeMessage(json_body: string, cb: T): void;
    /**
     * 设置提示信息是否可见
     * @param uri
     * @param resultCallback
     */
    setMessageVisible(uri: boolean, cb: T): void;
    /**
     * 修改标题样式
     * @param styleValue 标题样式值，当前仅支持2（即Emui 10.0风格）
     */
    changeTitleStyle(styleValue: number): void;
    /**
     * 显示标题栏中的图标
     * @param json_body
     * @param buttonClick
     * @param isVisible
     * @param resultCallback
     */
    showTitleBarIcons(json_body: string, buttonClick: string, isVisible: boolean, cb: T): void;
    /**
     * 查询手机状态栏高度
     * @param resultCallback
     */
    getStatusBarHeight(cb: T): void;
    /**
     * 调用原生弹框样式
     * @param time 提示显示时长
     * @param body 提示内容
     */
    toast(time: number, body: string): void;
    /**
     * 判断平板横竖屏状态
     * @return -1:非平板 0:平板横屏 1:平板竖屏
     */
    getPadLandscape(): number | undefined;
    /**
     * 退出设备页面
     */
    finishDeviceActivity(): void;
    /**
     * 打印debug级别的日志信息
     * @param isSaveLog true，保存日志信息，false不保存日志信息
     * @param tag 日志信息的关键字
     * @param msg 需要打印的内容或信息
     */
    printLogDebug(isSaveLog: boolean, tag: string, msg: string): void;
    /**
     * 打印用户级别的日志信息
     * @param isSaveLog true，保存日志信息，false不保存日志信息
     * @param tag 日志信息的关键字
     * @param msg 需要打印的内容或信息
     */
    printLog(isSaveLog: boolean, tag: string, msg: string): void;
    /**
     * 启用重写安卓物理返回键
     * @param enable
     * @param resultCallback
     */
    overrideBackPressed(enable: boolean, cb: T): void;
    /**
     * 重新设置标题栏右上角的设置按钮点击事件
     * @param enable
     * @param resultCallback
     */
    overrideSettingClick(enable: boolean, cb: T): void;
    /**
     * 请求三方服务器
     * @param json_body
     * @param resultCallback
     */
    requestThirdPartConfig(json_body: string, cb: T): void;
    /**
     * 向数据库中存储/查询键值对
     * @param json_body
     * @param resultCallback
     */
    setH5Info(key: string, value: string, cb: T): void;
    /**
     * 向数据库中存储/查询/删除键值对
     * @param key
     * @param value
     * @param resultCallback
     */
    setStorageSync(key: string, value: string, cb: T): void;
    /**
     * 查询系统版本
     * @param resultCallback
     */
    getVersion(cb: T): void;
    /**
     * H5界面刷新
     */
    refreshWebView(): void;
    /**
     * 登录验证接口
     * @param resultCallback
     */
    verifyPassword(cb: T): void;
    /**
     * 查询App版本号
     * @param resultCallback
     */
    getAppVersionCode(cb: T): void;
    /**
     * 查询当前用户家庭角色
     * @param resultCallback
     */
    getUserRole(cb: T): void;
    /**
     * BI打点接口
     * @param biKey
     * @param biH5Info
     */
    reportH5SingleDevBiInfo(biKey: string, biH5Info: string): void;
    /**
     * 调用系统摄像头拍照/从相册查询图片
     * @param fileName
     * @param resultCallback
     */
    takePhoto(fileName: string, cb: T): void;
    /**
     * 查询App语言
     */
    getAppLanguageSync(): string | undefined;
    /**
     * 查询当前模式
     * @param resultCallback
     * @return 1:正常模式 2:dark模式
     */
    getDarkMode(cb?: T): void;
    /**
     * 是否启用native的语音功能引导页
     * @param enabled
     * @param resultCallback
     */
    setGuideDialogEnable(enabled: boolean, cb: T): void;
    /**
     * 判断（折叠屏手机）屏幕是否展开
     */
    isScreenSpreaded(): boolean | undefined;
    /**
     * 创建快捷方式 IOS
     * @param deviceId
     * @param productId
     * @param deviceName
     * @param resultCallback
     */
    createShortCut(deviceId: string, productId: string, deviceName: string, cb: T): void;
    /**
     * 创建快捷方式 android
     * @param deviceId
     * @param productId
     * @param deviceName
     * @param resultCallback
     */
    createShortCut(deviceId: string, productId: string, deviceName: string): void;
    /**
     * 请求三方服务器（支持自定义header）
     * @param jsonBody
     * @param resultCallback
     */
    doHttpsRequest(jsonBody: string, cb: T): void;
    /**
     * 共享设备 什么操作不清楚 文档里没有
     * @param cb
     */
    refuseSharedDevice(cb: T): void;
}
