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

"""
海报服务层
封装现有功能，提供API调用
"""

import logging
import uuid
from typing import List, Dict, Any, Optional, Tuple
from datetime import datetime

from core.config import ConfigManager, PosterConfig
from core.ai import AIAgent
from utils.file_io import OutputManager
from poster.poster_generator import PosterGenerator
from poster.text_generator import PosterContentGenerator

logger = logging.getLogger(__name__)


class PosterService:
    """海报服务类"""
    
    def __init__(self, ai_agent: AIAgent, config_manager: ConfigManager, output_manager: OutputManager):
        """
        初始化海报服务
        
        Args:
            ai_agent: AI代理
            config_manager: 配置管理器
            output_manager: 输出管理器
        """
        self.ai_agent = ai_agent
        self.config_manager = config_manager
        self.output_manager = output_manager
        
        # 初始化各个组件
        self.poster_generator = PosterGenerator(config_manager, output_manager)
        self.text_generator = PosterContentGenerator(ai_agent)
        
    def generate_poster(self, content: Dict[str, Any], topic_index: str, 
                       template_name: Optional[str] = None) -> Tuple[str, str, str, str]:
        """
        生成海报
        
        Args:
            content: 内容数据，包含标题、正文等
            topic_index: 主题索引，用于文件命名
            template_name: 模板名称，如果为None则根据配置选择
            
        Returns:
            请求ID、主题索引、生成的海报文件路径和使用的模板名称
        """
        logger.info(f"开始为主题 {topic_index} 生成海报")
        
        # 生成海报
        poster_path = self.poster_generator.generate_poster(content, topic_index, template_name)
        
        # 获取使用的模板名称
        if template_name is None:
            template_name = self.poster_generator._select_template()
        
        # 生成请求ID
        request_id = f"poster-{datetime.now().strftime('%Y%m%d-%H%M%S')}-{str(uuid.uuid4())[:8]}"
        
        logger.info(f"海报生成完成，请求ID: {request_id}, 主题索引: {topic_index}, 模板: {template_name}")
        return request_id, topic_index, poster_path, template_name
    
    def get_available_templates(self) -> Tuple[List[str], str]:
        """
        获取可用的模板列表
        
        Returns:
            可用的模板列表和默认模板
        """
        # 获取配置
        poster_config = self.config_manager.get_config('poster', PosterConfig)
        
        # 获取可用模板
        available_templates = poster_config.available_templates
        
        # 获取默认模板
        default_template = poster_config.template_selection
        if default_template == "random" and available_templates:
            default_template = available_templates[0]
            
        return available_templates, default_template
    
    async def generate_poster_text(self, system_prompt: str, user_prompt: str, 
                                context_data: Optional[Dict[str, Any]] = None,
                                temperature: Optional[float] = None,
                                top_p: Optional[float] = None) -> Tuple[str, Dict[str, Any]]:
        """
        生成海报文案
        
        Args:
            system_prompt: 系统提示词
            user_prompt: 用户提示词
            context_data: 上下文数据，用于填充提示词中的占位符
            temperature: 生成温度参数
            top_p: top_p参数
            
        Returns:
            请求ID和生成的文案内容
        """
        logger.info("开始生成海报文案")
        
        # 生成文案
        text_content = await self.text_generator.generate_text_for_poster(
            system_prompt=system_prompt,
            user_prompt=user_prompt,
            context_data=context_data,
            temperature=temperature,
            top_p=top_p
        )
        
        # 生成请求ID
        request_id = f"text-{datetime.now().strftime('%Y%m%d-%H%M%S')}-{str(uuid.uuid4())[:8]}"
        
        logger.info(f"海报文案生成完成，请求ID: {request_id}")
        return request_id, text_content 