from __future__ import annotations

from typing import Protocol


class ProviderGenerationRecordLike(Protocol):
    """图片/视频供应商提交接口需要的任务字段协议。

    GenerationRecord 与 ChatGenerationTask 都具备这些字段，但二者不是同一个 ORM 模型。
    使用 Protocol 可以避免把 submit_image_task / submit_video_task 错误限制为某一个具体模型。
    """

    id: str
    original_prompt: str
    optimized_prompt: str | None
    media_references: str | None
    gen_type: str
    duration: int | None
    aspect_ratio: str | None
    resolution: str | None
    image_size: str | None
    image_proportion: str | None
    image_px: str | None


class ProviderImageEngineLike(Protocol):
    """图片生成提交接口需要的引擎字段协议。"""

    name: str
    api_base: str
    api_key: str
    model_name: str
    default_size: str | None


class ProviderVideoEngineLike(Protocol):
    """视频生成提交接口需要的引擎字段协议。"""

    name: str
    api_base: str
    api_key: str
    model_name: str
