import * as THREE from "three";
import type { Mode } from "../application/mode";
import type { TilesetHeader } from "../model/tile3d/header";
import type { WorkObserverProto } from './workObserverProto';
import type { LooseWork, LoosePanoWork } from "./looseWorkType";
import { CubeFace } from "../types/cube";
import type { PanoId } from "../utils/pano";
import type { Histogram } from "../texture/histogram";
/** 全景视频贴片 */
export interface WorkVideo {
    work: Work;
    /** 视频源 url */
    source: string;
    /** 视频源变化矩阵 */
    matrix: THREE.Matrix4;
    /** 视频源长宽尺寸 */
    size: THREE.Vector2;
}
export interface WorkCubeImage extends Record<CubeFace, string> {
    work: Work;
    histogram?: Histogram;
}
export interface WorkTile extends WorkCubeImage {
    /** 层级 */
    level: number;
    /** 尺寸 */
    size: number;
    /** 缩放比例 */
    scale: number;
}
/** 全景图 */
export interface WorkImage extends WorkCubeImage {
    /** 分辨率表 */
    sizeList: readonly number[];
    /** 瓦片信息 */
    tiles: readonly WorkTile[];
    /** 点位视频 */
    video?: WorkVideo;
}
/** 初始化位姿参数 */
export interface WorkInitial {
    work: Work;
    /** 模态 */
    mode?: Mode;
    /** 点位序号 */
    panoIndex?: number;
    /** 相机水平角 */
    longitude?: number;
    /** 相机俯仰角 */
    latitude?: number;
    /** 相机可视角度（垂直）*/
    fov?: number;
    /** 相机观察点位置 [x, y, z] */
    offset?: THREE.Vector3;
    /** 相机距离观察点距离 */
    distance?: number;
}
/** 每个点位的数据 */
export interface WorkObserver extends WorkObserverProto {
    /** work */
    work: Work;
    /** 序号 */
    index: number;
    /** 序号 */
    panoIndex: number;
    /**
     * 序号
     * @example
     * `${workCode}[${panoIndex}]`
     */
    panoId: PanoId;
    /** 点位所在楼层 */
    floorIndex: number;
    /** 点位 derived_id */
    derivedId: number | string;
    /** 点位 derived_id_str */
    derivedIdStr: string;
    /** 点位是否激活可用 */
    active: boolean;
    /** 点位是否可加载 */
    loadable: boolean;
    /** 点位全景图 */
    images: WorkImage;
    /**
     * @deprecated
     * 可以看到的相关点位序号
     * 数据和 accessibleNodes 一致，使用 accessibleNodes
     */
    visibleNodes: readonly number[];
    /** 可以连通的相关点位序号 */
    accessibleNodes: readonly number[];
    /** 点位和模型的地面坐标 */
    standingPosition: THREE.Vector3;
    /** 点位和模型的观察点坐标 */
    position: THREE.Vector3;
    /** 点位和模型的旋转对齐关系四元数 */
    quaternion: THREE.Quaternion;
    /** 点位和模型的旋转对齐关系矩阵 */
    matrix: THREE.Matrix4;
}
export interface WorkModelLayer {
    /** work */
    work: Work;
    /** 模型类型 point_cloud | mesh | gaussian_splatting */
    type: 'point_cloud' | 'mesh' | 'gaussian_splatting';
    /** 模型名称 */
    name: string;
    /** 指定上方向 */
    upAxis: string;
    /** 如果 tileset.json 地址 */
    tileset: string;
}
/** 模型数据 */
export interface WorkModel {
    /** work */
    work: Work;
    /** 模型文件地址 at3d / domez */
    file?: string;
    /** 模型贴图文件地址 */
    textures?: readonly string[];
    /** 模型贴图文件地址的父目录 */
    textureBase?: string;
    /** 指定上方向，对于 obj， ply 等定义不明确的需要指定上方向 */
    upAxis?: string;
    /** 模型的地理坐标数据 */
    coordinate?: NonNullable<TilesetHeader['rootMeta']>['coordinate'];
    /** 3d tile */
    layers: readonly WorkModelLayer[];
}
export interface Work {
    /** 数据签发人 */
    issuer: string;
    /** 编号 */
    workCode: string;
    /** 内部项目 id */
    projectId?: string;
    /** 允许访问的安全域名 */
    allowHosts: readonly string[];
    /** 过期时间 */
    expire: Date;
    /** 名称 */
    name: string;
    /** 根地址 */
    baseURL: string;
    /** 初始化参数 */
    initial: WorkInitial;
    /** 相对位姿 */
    transform: THREE.Matrix4;
    /** 模型参数 */
    model?: WorkModel;
    /** 全景点位信息 */
    observers: readonly WorkObserver[];
}
export declare class Work {
    jsonp: boolean;
    shortPath: boolean;
    observerBox: THREE.Box3;
    /**
     * 控制参数
     * @deprecated 通过 work.transform 替换
     */
    options: {
        /**
         * 位姿修正
        * @deprecated 通过 work.transform 替换
         */
        transform: THREE.Matrix4;
    };
    /**
     * 原始数据
     * @deprecated 通过 work.toJSON 替换
     */
    raw: {
        works: string[];
    };
    /**
     * 解析 Work 数据
     * @param obj - work 数据，从如数开发者平台获取
     * @param options - 配置参数， 可以在此二次设置 baseURL 等参数
     * @returns - 签署过的 Work 数据结构
     */
    static parse: typeof parseWork;
    constructor(obj: Work | LoosePanoWork | LooseWork | (Work | LooseWork)[] | any, options: ParseOptions);
    getURL(source: string): string;
    verifyURL(source: string): boolean;
    toJSON(): any;
}
export type ParseOptions = {
    /** 位姿 */
    transform?: THREE.Matrix4 | number[];
    /** 重置 WorkCode */
    workCode?: string | ((input: any) => string);
    /** 重写资源前缀 */
    baseURL?: string;
    /** 资源地址使用短地址 */
    shortPath?: boolean;
    /** 资源使用 jsonp 方式发布 */
    jsonp?: boolean;
};
/**
 * 解析 Work 数据
 * @param obj - work 数据，从如数开发者平台获取
 * @param options - 配置参数， 可以在此二次设置 baseURL 等参数
 * @returns - 签署过的 Work 数据结构
 */
export declare function parseWork(obj: Work | LoosePanoWork | LooseWork | string | any, options?: ParseOptions): Work;
