/**
 * AIGenerators.media.ts — 图片/视频生成层
 *
 * 继承 AIGeneratorsBase，添加：
 * - genImage（Keepwork proxy + 直连 OpenAI/Google/OpenRouter）
 * - genVideo（Keepwork proxy + OpenRouter 直连）
 * - getVideoTaskStatus / pollVideoTask
 * - CloudDrive 上传辅助（_maybeUploadDataURI）
 * - OpenRouter 视频直连辅助（_genVideoOpenRouter / _pollVideoTaskOpenRouter 等）
 * - 图片相关辅助（_toOpenRouterImageParts / _buildOpenRouterImageMessages 等）
 */
import { AIGeneratorsBase, type AIGeneratorsSDKRef, type GenChatOptions } from './AIGenerators.base';
/** genImage 选项 */
export interface GenImageOptions {
    width?: number;
    height?: number;
    provider?: string;
    apiKey?: string;
    model?: string;
    compressionRatio?: number;
    images?: Array<{
        url?: string;
        image_url?: {
            url: string;
        };
        role?: string;
    }>;
    /** 是否上传 data URI 到 Keepwork CDN（默认 true） */
    uploadResultToKeepwork?: boolean;
    fileName?: string;
    /** CloudDrive 临时文件生命周期天数（默认 180） */
    expire?: number;
    preferDirect?: boolean;
    directOnly?: boolean;
    directProvider?: string;
    aspectRatio?: string;
    aspect_ratio?: string;
    imageSize?: string;
    image_size?: string;
    size?: string;
    modalities?: string[];
    outputModalities?: string[];
    output_modalities?: string[];
    onMessage?: GenChatOptions['onMessage'];
    onReasoning?: GenChatOptions['onReasoning'];
    onImage?: GenChatOptions['onImage'];
    extraHeaders?: Record<string, string>;
    stream?: boolean;
    [key: string]: unknown;
}
/** genVideo 选项 */
export interface GenVideoOptions {
    model?: string;
    duration?: number;
    resolution?: string;
    ratio?: string;
    size?: string;
    generateAudio?: boolean;
    watermark?: boolean;
    seed?: number;
    apiKey?: string;
    images?: Array<{
        url?: string;
        role?: string;
    }>;
    videos?: Array<{
        url?: string;
        role?: string;
    }>;
    audios?: Array<{
        url?: string;
        role?: string;
    }>;
    directLink?: boolean;
    preferDirect?: boolean;
    directOnly?: boolean;
    extraHeaders?: Record<string, string>;
    providerOptions?: Record<string, unknown>;
    callbackUrl?: string;
    [key: string]: unknown;
}
/** 视频任务状态 */
export interface VideoTaskStatus {
    status: 'succeeded' | 'failed' | 'pending' | 'in_progress' | 'timeout' | 'cancelled' | 'expired' | string;
    videoUrl?: string;
    contentUrl?: string;
    duration?: number;
    usage?: unknown;
    error?: string | object;
    raw?: unknown;
}
/** pollVideoTask 回调 */
export interface PollVideoCallbacks {
    onStatus?: (status: string, data: unknown) => void;
    interval?: number;
    timeout?: number;
    apiKey?: string;
    model?: string;
    directLink?: boolean;
}
/**
 * AIGenerators — 继承自 AIGeneratorsBase，提供图片/视频生成能力。
 */
declare class AIGenerators extends AIGeneratorsBase {
    constructor(sdk: AIGeneratorsSDKRef);
    /** 推断图片生成 provider（优先 caller > model 自动检测，默认 seedream）。 */
    _inferImageProvider(model?: string, provider?: string): string;
    /**
     * 将参考图片列表转换为 OpenRouter chat-completions 格式的 image_url parts。
     */
    _toOpenRouterImageParts(images?: Array<{
        url?: string;
        image_url?: {
            url: string;
        };
        [key: string]: unknown;
    }>): Array<{
        type: string;
        image_url: {
            url: string;
        };
    }>;
    /** 构建包含参考图片的 OpenRouter 多模态 user 消息。 */
    _buildOpenRouterImageMessages(prompt: string, images?: GenImageOptions['images']): Array<{
        role: string;
        content: unknown;
    }>;
    /** 从 caller opts 构建 OpenRouter image_config（aspect_ratio + image_size）。 */
    _buildOpenRouterImageConfig(opts?: GenImageOptions): {
        aspect_ratio?: string;
        image_size?: string;
    } | null;
    /** 根据 model 决定 OpenRouter 图片生成的 output modalities。 */
    _buildOpenRouterImageModalities(model: string, opts?: GenImageOptions): string[];
    /** 构建图片生成失败时的详细错误信息。 */
    _buildNoImageError(data: unknown, model?: string): string;
    /**
     * 生成图片（via Keepwork genImage API 或直连 provider）。
     *
     * 路由逻辑：
     * 1. 有 apiKey + preferDirect → 直连（OpenAI / Google / OpenRouter）
     * 2. directOnly 但无 key → 抛出
     * 3. 其余 → 通过 Keepwork proxy
     *
     * @param prompt - 图片描述
     * @param opts   - 尺寸 / provider / apiKey / model / 参考图片等
     * @returns 生成的图片 URL（或 data URI）
     */
    genImage(prompt: string, opts?: GenImageOptions): Promise<string | null>;
    /** @private 直连 provider 生成图片的分发器。 */
    private _genImageDirect;
    private _genImageOpenAI;
    private _genImageGoogle;
    private _genImageOpenRouter;
    /**
     * 将 data URI 上传到 Keepwork CDN（默认行为）。
     * 优先使用用户个人 CloudDrive，失败时回退 tempvision bucket。
     * 传入 `uploadResultToKeepwork:false` 保留原始 data URI。
     */
    _maybeUploadDataURI(dataURI: string, opts?: {
        uploadResultToKeepwork?: boolean;
        fileName?: string;
        expire?: number;
    }): Promise<string>;
    private _uploadDataURIToCloudDrive;
    /**
     * 提交视频生成任务（via Keepwork genVideo API 或 OpenRouter 直连）。
     *
     * @param prompt - 视频描述
     * @param opts   - 时长 / 分辨率 / 宽高比 / 参考图片 / provider 等
     * @returns taskId 字符串（OpenRouter 任务以 `openrouter:` 前缀标识）
     */
    genVideo(prompt: string, opts?: GenVideoOptions): Promise<string>;
    /**
     * 单次轮询视频生成任务状态。
     * 支持 Keepwork 任务 ID 和 `openrouter:` 前缀的 OpenRouter 任务 ID。
     */
    getVideoTaskStatus(taskId: string, opts?: {
        apiKey?: string;
        model?: string;
    }): Promise<VideoTaskStatus>;
    /**
     * 持续轮询视频任务直到完成或失败。
     * 支持 Keepwork 任务 ID 和 `openrouter:` 前缀 ID。
     *
     * @param taskId    - 任务 ID
     * @param callbacks - onStatus / interval / timeout / apiKey / model / directLink
     */
    pollVideoTask(taskId: string, callbacks?: PollVideoCallbacks): Promise<VideoTaskStatus>;
    private _genVideoOpenRouter;
    _extractOpenRouterErrorMessage(data: unknown): string;
    _resolveOpenRouterApiKey(opts?: {
        apiKey?: string;
        model?: string;
    }): string;
    /** 从 taskId 中剥离 'openrouter:' 前缀得到 OpenRouter jobId（保持与重构前 AIGenerators.js 原型方法一致）。 */
    _openRouterJobIdFromTaskId(taskId: unknown): string;
    _normalizeOpenRouterVideoStatus(data: Record<string, unknown>): VideoTaskStatus & {
        contentUrl?: string;
    };
    _resolveOpenRouterVideoDirectLink(contentUrl: string | undefined, apiKey: string, opts?: {
        directLink?: boolean;
    }): Promise<string | undefined>;
    private _getVideoTaskStatusOpenRouter;
    private _pollVideoTaskOpenRouter;
}
export default AIGenerators;
//# sourceMappingURL=AIGenerators.media.d.ts.map