"""Hezor2 创作报告发布工具。

提供便捷函数用于发布创作报告到 Hezor2。
"""

import logging
from pathlib import Path

from hezor_common.data_model.creations.core import CreationGenerateResult
from hezor_common.data_model.creations.execution import CreationWebhookResponse
from hezor_common.transfer.base_sdk import MetaInfo
from hezor_common.transfer.hezor2_sdk.base.constants import (
    DEFAULT_API_BASE_URL,
    DEFAULT_API_KEY,
)
from hezor_common.transfer.hezor2_sdk.base.hezor2_api_client import (
    Hezor2APIClient,
)

logger = logging.getLogger(__name__)


async def publish_creation_report(
    creation_result: CreationGenerateResult,
    task_id: str,
    execution_id: str,
    base_url: str = DEFAULT_API_BASE_URL,
    api_key: str | None = DEFAULT_API_KEY,
    meta_info: MetaInfo | None = None,
    private_key_path: str | Path | None = None,
    password: bytes | None = None,
    timeout: float = 120.0,
) -> CreationWebhookResponse:
    """发布创作报告到 Hezor2（便捷函数）。

    这是一个便捷函数，内部使用 Hezor2APIClient 发送创作报告。

    Parameters
    ----------
    creation_result : CreationGenerateResult
        生成的创作结果
    task_id : str
        任务 ID（如 "monthly_report"），定义执行什么任务，可以重复表明同一任务
    execution_id : str
        执行 ID（如 "exec_2026_01_27_001"），表示一次具体的执行实例，唯一
    base_url : str
        API 基础 URL
    api_key : str | None
        API 密钥
    meta_info : MetaInfo | None
        元信息对象
    private_key_path : str | Path | None
        私钥文件路径
    password : bytes | None
        私钥密码
    timeout : float
        请求超时时间（秒）

    Returns
    -------
    CreationWebhookResponse
        Webhook 响应结果

    Raises
    ------
    httpx.HTTPError
        如果 HTTP 请求失败

    Examples
    --------
    >>> from hezor_common.transfer.hezor2_sdk import publish_creation_report
    >>> response = await publish_creation_report(
    ...     creation_result=result,
    ...     task_id="monthly_report",
    ...     execution_id="exec_2026_01_27_001"
    ... )
    >>> print(f"Status: {response.status}")
    """
    async with Hezor2APIClient(
        base_url=base_url,
        api_key=api_key,
        meta_info=meta_info,
        private_key_path=private_key_path,
        password=password,
        timeout=timeout,
    ) as client:
        return await client.publish_creation_report(
            payload=creation_result,
            task_id=task_id,
            execution_id=execution_id,
        )


__all__ = ["publish_creation_report"]
