import { Pose, Pano, PanoId } from "@realsee/five";
/**
 * Five 命令集合
 */
interface FiveActionReactCallbacks {
    /**
     * 移动相机。（不触发点位移动）
     * @description
     * 如果动画中途被打断（用户触发行为，或者调用 setState, load, changeMode）的等
     * 会 Promise.reject。运动完成则 Promise.resolve
     * @param pose - 相机目标位置
     * @param duration - 动画触发的时常
     * @returns Promise 是否移动成功
     */
    updateCamera(pose: Pose, duration: number): Promise<void>;
    /**
     * 获取画面中的像素颜色
     * @param x - 获取像素区域的起始坐标 x
     * @param y - 获取像素区域的起始坐标 y
     * @param width - 获取像素区域的宽度
     * @param height - 获取像素区域的高度
     * @param pixelRatio - 获取区域的像素比
     * @param flipY - 是否Y轴翻转
     * @param buffer - 存储数组
     * @returns rgba颜色平铺的 Uint8Array
     */
    getPixels<T extends Uint8Array | Uint8ClampedArray = Uint8Array>(x: number, y: number, width: number, height: number, pixelRatio?: number, flipY?: boolean, buffer?: T): T;
    /**
     * 获取画面中的像素颜色
     * @param options - 参数
     * @returns
     */
    getPixels<T extends Uint8Array | Uint8ClampedArray = Uint8Array>(options: {
        /** 获取像素区域的起始坐标 x */
        x: number;
        /** 获取像素区域的起始坐标 y */
        y: number;
        /** 获取像素区域的宽度 */
        width: number;
        /** 获取像素区域的高度 */
        height: number;
        /** 获取区域的像素比 */
        pixelRatio?: number;
        helperVisible?: boolean;
        skipPanorama?: boolean;
        /** 是否Y轴翻转 */
        flipY?: boolean;
        /** 存储数组 */
        buffer?: T;
    }): T;
    /**
     * 强制渲染
     * @description
     * 调用 `render()` 和 `needsRender()` 均可在按需渲染时，使得画面渲染一次
     * 区别在于：
     * - `needsRender()` 为在下帧渲染画面
     * - `render()` 在当前帧渲染画面
     * 推荐使用 `needsRender()`, 可以更加流畅。但是如果需要截图等同步操作，可以使用 `render()`
     *
     * @param callback - 渲染完成回调
     */
    render(callback?: () => void): void;
    /**
     * 下一帧渲染
     * @description
     * 调用 `render()` 和 `needsRender()` 均可在按需渲染时，使得画面渲染一次
     * 区别在于：
     * - `needsRender()` 为在下帧渲染画面
     * - `render()` 在当前帧渲染画面
     * 推荐使用 `needsRender()`, 可以更加流畅。但是如果需要截图等同步操作，可以使用 `render()`
     */
    needsRender(): void;
    /**
     * 预加载点位图片资源
     * @param pano - 观察点
     * @param callback - 加载完成回调, 并传递加载用时。
     * @returns 加载完成的 Promise 参数同 callback
     */
    preloadPano(pano: Pano | PanoId | number, callback?: (costs: number) => void): Promise<number>;
}
/**
 * Five React Hooks: 使用 Five 的命令
 *
 * @function updateCamera
 * ```
 * 移动相机。（不触发点位移动）
 * 如果动画中途被打断（用户触发行为，或者调用 setState, load, changeMode）的等
 * 会 Promise.reject。运动完成则 Promise.resolve
 *
 * // params pose - 相机目标位置
 * // params duration - 动画触发的时常
 * // params Promise - 是否移动成功
 * updateCamera(pose: Pose, duration: number): Promise<void>
 * ```
 *
 * @function getPixels
 * ```
 * 获取画面中的像素颜色
 * // param x - 获取像素区域的起始坐标 x
 * // param y - 获取像素区域的起始坐标 y
 * // param width - 获取像素区域的宽度
 * // param height - 获取像素区域的高度
 * // param pixelRatio - 获取区域的像素比
 * // returns rgba颜色平铺的 Uint8Array
 * getPixels(x: number, y: number, width: number, height: number, pixelRatio?: number): Uint8Array,
 * ```
 *
 * @function render
 * ```
 * 强制渲染
 * 调用 render() 和 needsRender() 均可在按需渲染时，使得画面渲染一次
 * 区别在于：
 * - needsRender() 为在下帧渲染画面
 * - render() 在当前帧渲染画面
 * 推荐使用 needsRender(), 可以更加流畅。但是如果需要截图等同步操作，可以使用 render()
 *
 * // param callback 渲染完成回调
 * render(callback?: () => void): void,
 * ```
 *
 * @function needsRender
 * ```
 * 下一帧渲染
 * 调用 render() 和 needsRender() 均可在按需渲染时，使得画面渲染一次
 * 区别在于：
 * - needsRender() 为在下帧渲染画面
 * - render() 在当前帧渲染画面
 * 推荐使用 needsRender(), 可以更加流畅。但是如果需要截图等同步操作，可以使用 render()
 * needsRender(): void,
 * ```
 *
 * @function preloadPano
 * ```
 * 预加载点位图片资源
 * // param panoIndex - 观察点序号
 * // param callback - 加载完成回调, 并传递加载用时。
 * // returns 加载完成的 Promise 参数同 callback
 * preloadPano(panoIndex: number, callback?: (costs: number) => void): Promise<number>
 * ```
 *
 * @example
 * ```
 * const { updateCamera, initBasisLoader, getPixels, render, needsRender, preloadPano } = useFiveAction();
 * ```
 */
declare function useFiveAction(): FiveActionReactCallbacks;
export { useFiveAction, FiveActionReactCallbacks };
