#!/usr/bin/env python3
# -*- coding: utf-8 -*-

"""
海报文案内容生成器
"""
import logging
from typing import Dict, Any, Optional, List

from core.ai import AIAgent
from utils.file_io import ResourceLoader, process_llm_json_text

logger = logging.getLogger(__name__)

class PosterContentGenerator:
    """
    使用AI模型为海报生成文本内容。
    """
    def __init__(self, ai_agent: AIAgent):
        """
        初始化内容生成器。

        Args:
            ai_agent (AIAgent): 用于与AI模型交互的代理。
        """
        self.ai_agent = ai_agent
        self.logger = logging.getLogger(__name__)

    async def generate_text_for_poster(
        self,
        system_prompt: str,
        user_prompt: str,
        context_data: Optional[Dict[str, Any]] = None,
        temperature: Optional[float] = None,
        top_p: Optional[float] = None,
    ) -> Optional[Dict[str, Any]]:
        """
        为单个海报任务生成文本内容。

        Args:
            system_prompt (str): 提供给AI的系统级指令。
            user_prompt (str): 提供给AI的用户级指令，可包含占位符。
            context_data (Optional[Dict[str, Any]]): 用于填充用户指令占位符的数据。
            temperature (Optional[float]): AI模型温度参数。
            top_p (Optional[float]): AI模型top_p参数。

        Returns:
            Optional[Dict[str, Any]]: 解析后的JSON对象，包含生成的文本；如果失败则返回None。
        """
        if context_data:
            try:
                # 使用上下文数据格式化用户提示
                final_user_prompt = user_prompt.format(**context_data)
            except KeyError as e:
                self.logger.error(f"格式化用户提示失败，缺少键: {e}")
                return None
        else:
            final_user_prompt = user_prompt

        self.logger.info("正在调用AI生成海报文案...")
        self.logger.debug(f"System Prompt: {system_prompt[:200]}...")
        self.logger.debug(f"User Prompt: {final_user_prompt[:200]}...")

        try:
            raw_response, _, _, _ = await self.ai_agent.generate_text(
                system_prompt=system_prompt,
                user_prompt=final_user_prompt,
                temperature=temperature,
                top_p=top_p
            )

            if not raw_response:
                self.logger.error("AI未能返回任何内容。")
                return None

            # 使用通用JSON解析函数处理响应
            return process_llm_json_text(raw_response)

        except Exception as e:
            self.logger.error(f"调用AI生成文案时发生严重错误: {e}", exc_info=True)
            return None 