import Postmate from "postmate";


export interface RectangleSize {
    width: number;
    height: number;
}

export interface PostmateHandshake extends Postmate.ChildAPI {
    model: any;
}


/**
 * 文件类型
 *  * Word: Word 文档
 *  * PDF: PDF 文档
 *  * Presentation: 演示文稿（幻灯片）
 *  * Unknown: 未知
 */
export type FileType =
    "document" |
    "ppt" |
    "unknown";

/**
 * 播放器初始化参数
 */
export interface PlayerOptions {
    /**
     * 引擎基础 URL
     *
     * 用于按需载入引擎的脚本、WASM、Iframe等。
     */
    engineBaseUrl: string;

    /**
     * 图文版文档播放引擎 Iframe 地址
     *
     * (用于开发时设置)
     */
    imageEngineIframeUrl: string;

    /**
     * 动画版演示文稿播放引擎 Iframe 地址
     */
    presentationAnimationEngineIframeUrl: string;

    /**
     * 暗黑风格
     */
    dark: boolean;
}

/**
 * 播放器事件
 */
export interface PlayerEvents {
    /**
     * 已准备好
     */
    ready: undefined;

    /**
     * 页码更新
     */
    pageUpdate: Position;

    /**
     * 分页变更
     */
    paginationChange: Pagination;

    /**
     * 开始播放事件，打开课件加载完成后触发
     */
    play: PlayEvent;
}

/**
 * 播放事件
 */
export interface PlayEvent {
    /**
     * 文件名
     */
    name: string;

    /**
     * 开始播放的分页对象
     */
    pagination: Pagination;
}

/**
 * 分页对象
 */
export interface Pagination {
    /**
     * 总页数
     */
    total: number;

    /**
     * 当前页数
     */
    current: number;

    /**
     * 当前页的第 N 个动画 (仅 PPT 动画版有效)
     */
    step?: number;
}

/**
 * 点位
 */
export interface Position {
    /**
     * 页码
     */
    page: number;
    /**
     * 第 N 个动画
     */
    step?: number;
}

/**
 * 文件元信息
 */
export interface FileMetas {
    id: string;
    name: string;
    type: FileType;
    page?: number;
    thumb?: string;
    html?: {
        url: string;
        iv?: string;
        encryptKey?: string;
    }
    image?: {
        imageUrlPrefix: string;
        urls: string[];
        iv?: string;
        encryptKey?: string;
    }
    animation?: {
        infoUrl: string;
        pageUrlPrefix: string;
        resourceUri: string;
        encryptKey?: string;
        iv?: string;
        /**
         * 子资源 （例如 PPT 中内嵌的视频）
         */
        subs?: Record<string, unknown>
    }
}

/**
 * 文件源
 */
export interface FileSource {
    /**
     * 文件元信息
     */
    metas?: FileMetas;

    /**
     * 文件 Token
     */
    token?: string;
}

/**
 * 播放选项
 */
export interface PlayOptions {
    /**
     * 播放初始页
     */
    defaultPage: number;

    /**
     * 播放初始动画步骤
     */
    defaultStep: number;

    /**
     * 是否垂直播放
     */
    vertical: boolean;
}

/**
 * 缩略图
 */
export interface Thumb {
    /**
     * 页码
     */
    page: number;

    /**
     * URL
     */
    url: string;
}

export interface EngineComponent {
    prev(): void;

    next(): void;

    goto(pos: Position): void;

    zoomIn(): void;

    zoomOut(): void;

    zoomReset(): void;

    zoomTo(zoom: number): void;
}
