import { PPTElement, PPTImageElement, PPTVideoElement, Slide } from './slides';
export type SupportedLocale = 'zh-CN' | 'en';
export type ThemeMode = 'dark' | 'light';
export interface InitData {
    /** JSON 数据（包含 slides, theme 等） */
    json?: Record<string, any>;
    /** PPTX 文件 URL */
    pptUrl?: string;
}
export interface UploadFileParams {
    /** File 对象 */
    file?: File;
    /** base64 字符串 */
    base64?: string;
}
export interface SaveCallbackParams {
    /** PPTX 文件 URL */
    pptUrl: string;
    /** JSON 数据 */
    json: Record<string, any>;
    /** 幻灯片图片 URL 列表 */
    slideImages: string[];
}
export type ImageAIEntryElement = PPTImageElement & {
    /** 按当前裁剪范围和裁剪形状生成的图片；导出失败时回退为 src */
    clipSrc: string;
};
export interface ImageAIEntryClickParams {
    /** 当前触发 AI 入口的图片元素；src 为原图，clipSrc 为裁剪后的图 */
    element: ImageAIEntryElement;
}
export interface InsertImageParams {
    /** 图片地址，支持 URL、base64 dataURL、blob URL */
    src: string;
    /** 目标页面 ID；优先级高于 slideIndex */
    slideId?: string;
    /** 目标页面索引，默认当前页 */
    slideIndex?: number;
    /** 图片左上角横坐标，默认居中 */
    left?: number;
    /** 图片左上角纵坐标，默认居中 */
    top?: number;
    /** 图片宽度，未传时使用图片原始宽度并自动适配画布 */
    width?: number;
    /** 图片高度，未传时按原图比例计算或自动适配画布 */
    height?: number;
    /** 是否锁定宽高比例，默认 true */
    fixedRatio?: boolean;
    /** 旋转角度，默认 0 */
    rotate?: number;
    /** 插入后是否选中该图片，默认 true */
    select?: boolean;
}
export interface ReplaceImageParams {
    /** 新图片地址，支持 URL、base64 dataURL、blob URL */
    src: string;
    /** 被替换的图片元素 ID；不传则替换当前选中的图片 */
    elementId?: string;
    /** 目标页面 ID；优先级高于 slideIndex */
    slideId?: string;
    /** 目标页面索引，默认当前页；当传入 elementId 且未传页面信息时会自动查找 */
    slideIndex?: number;
    /** 是否保持原图片元素尺寸和位置，默认 false；默认保持左上角和宽度，高度按新图比例自适应 */
    keepSize?: boolean;
    /** 新宽度；默认使用原图片元素宽度 */
    width?: number;
    /** 新高度；不传时按新图片比例自适应 */
    height?: number;
    /** 是否锁定宽高比例，不传则沿用原元素配置 */
    fixedRatio?: boolean;
    /** 是否清除原图片裁剪信息，默认 false；尺寸自适应时会自动清除裁剪 */
    resetClip?: boolean;
    /** 替换后是否选中该图片，默认 true */
    select?: boolean;
}
export interface InsertVideoParams {
    /** 视频地址，支持 URL、base64 dataURL、blob URL */
    src: string;
    /** 目标页面 ID；优先级高于 slideIndex */
    slideId?: string;
    /** 目标页面索引，默认当前页 */
    slideIndex?: number;
    /** 视频左上角横坐标，默认居中 */
    left?: number;
    /** 视频左上角纵坐标，默认居中 */
    top?: number;
    /** 视频宽度，未传时使用视频原始宽度并自动适配画布 */
    width?: number;
    /** 视频高度，未传时按视频比例计算或自动适配画布 */
    height?: number;
    /** 旋转角度，默认 0 */
    rotate?: number;
    /** 是否自动播放，默认 false */
    autoplay?: boolean;
    /** 视频封面 */
    poster?: string;
    /** 视频后缀，当资源链接缺少后缀时用该字段确认资源类型 */
    ext?: string;
    /** 插入后是否选中该视频，默认 true */
    select?: boolean;
}
export interface ReplaceVideoParams {
    /** 新视频地址，支持 URL、base64 dataURL、blob URL */
    src: string;
    /** 被替换的视频元素 ID；不传则替换当前选中的视频 */
    elementId?: string;
    /** 目标页面 ID；优先级高于 slideIndex */
    slideId?: string;
    /** 目标页面索引，默认当前页；当传入 elementId 且未传页面信息时会自动查找 */
    slideIndex?: number;
    /** 是否保持原视频元素尺寸和位置，默认 false；默认保持左上角和宽度，高度按新视频比例自适应 */
    keepSize?: boolean;
    /** 新宽度；默认使用原视频元素宽度 */
    width?: number;
    /** 新高度；不传时按新视频比例自适应 */
    height?: number;
    /** 是否自动播放，不传则沿用原元素配置 */
    autoplay?: boolean;
    /** 视频封面；传入空字符串可清空原封面 */
    poster?: string;
    /** 视频后缀，当资源链接缺少后缀时用该字段确认资源类型 */
    ext?: string;
    /** 替换后是否选中该视频，默认 true */
    select?: boolean;
}
export interface LtPPTProps {
    /** 初始化数据 */
    initData?: InitData;
    /** 文件上传方法，接受包含 file 或 base64 的对象，返回资源的网络链接 */
    onUploadFile?: (params: UploadFileParams) => Promise<string>;
    /** 幻灯片内容变更回调 */
    onChange?: (slides: Slide[]) => void;
    /** 保存回调 */
    onSave?: (params: SaveCallbackParams) => void;
    /** 初始化完成回调，在 initData 数据加载完毕后触发；若无 initData 则不触发 */
    onInitFinished?: () => void;
    /** 语言设置 */
    locale?: SupportedLocale;
    /** 容器宽度（CSS 值，如 '100%' 或 '1200px'） */
    width?: string;
    /** 容器高度（CSS 值，如 '100vh' 或 '800px'） */
    height?: string;
    /** 是否只读 */
    readonly?: boolean;
    /** 主题模式，dark 或 light，默认 dark */
    theme?: ThemeMode;
    /** 返回按钮回调，传入后头部左侧显示返回图标 */
    onReturn?: () => void;
    /** 点击图片 AI 入口时触发 */
    onImageAIEntryClick?: (params: ImageAIEntryClickParams) => void;
}
export interface LtPPTInstance {
    /** 获取当前幻灯片数据 */
    getSlides: () => Slide[];
    /** 获取当前页选中的元素 */
    getSelectedElements: () => PPTElement[];
    /** 设置幻灯片数据 */
    setSlides: (slides: Slide[]) => void;
    /** 进入放映模式 */
    startScreening: () => void;
    /** 获取当前幻灯片索引 */
    getCurrentIndex: () => number;
    /** 向指定页面插入图片 */
    insertImage: (params: InsertImageParams) => Promise<PPTImageElement | null>;
    /** 替换指定图片元素，未指定元素时替换当前选中图片 */
    replaceImage: (params: ReplaceImageParams) => Promise<PPTImageElement | null>;
    /** 向指定页面插入视频 */
    insertVideo: (params: InsertVideoParams) => Promise<PPTVideoElement | null>;
    /** 替换指定视频元素，未指定元素时替换当前选中视频 */
    replaceVideo: (params: ReplaceVideoParams) => Promise<PPTVideoElement | null>;
}
