# 环境要求：Python 3.8+
# 依赖包：pip install openai requests python-dotenv

import os
import json
import logging
from typing import Dict, Any
from dataclasses import dataclass
from openai import OpenAI
from dotenv import load_dotenv

os.environ["OPENAI_API_KEY"] = "xxxx"
os.environ["OPENAI_BASE_URL"] = "https://api.openai.com/v1"

# 加载环境变量
load_dotenv()

# 配置日志
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)


@dataclass
class WorkflowContext:
    """工作流上下文，存储中间数据"""
    input_data: Dict[str, Any]
    intermediate_results: Dict[str, Any] = None

    def __post_init__(self):
        if self.intermediate_results is None:
            self.intermediate_results = {}


class NewsAnalysisWorkflow:
    """新闻分析工作流类"""

    def __init__(self):
        self.client = OpenAI(base_url=os.getenv('OPENAI_BASE_URL'),api_key=os.getenv("OPENAI_API_KEY"))
        self.context = None

    def extract_key_info(self, news_content: str) -> Dict[str, Any]:
        """步骤1：提取关键信息"""
        logger.info("开始提取关键信息...")

        try:
            response = self.client.chat.completions.create(
                model="gpt-4o-mini",
                messages=[
                    {"role": "system", "content": "你是一个专业的技术新闻分析师"},
                    {"role": "user", "content": f"""
                    从以下技术文章中提取关键信息：
                    {news_content}

                    输出格式：JSON格式，包含标题、核心观点、技术细节、影响分析。
                    请直接返回分析内容，不要添加任何格式标记。
                    """}
                ],
                temperature=0.3
            )

            result = json.loads(response.choices[0].message.content)
            logger.info("关键信息提取完成")
            return result

        except Exception as e:
            logger.error(f"关键信息提取失败: {e}")
            raise

    def generate_insights(self, key_info: Dict[str, Any]) -> str:
        """步骤2：生成观点和评论"""
        logger.info("开始生成观点和评论...")

        try:
            response = self.client.chat.completions.create(
                model="gpt-4o-mini",
                messages=[
                    {"role": "system", "content": "你是一个资深的科技评论家，擅长提供专业、客观、有洞察力的分析"},
                    {"role": "user", "content": f"""
                    基于以下信息生成独到的观点和评论：
                    {json.dumps(key_info, ensure_ascii=False, indent=2)}

                    要求：专业、客观、有洞察力，字数控制在800字以内
                    """}
                ],
                temperature=0.7
            )

            result = response.choices[0].message.content
            logger.info("观点生成完成")
            return result

        except Exception as e:
            logger.error(f"观点生成失败: {e}")
            raise

    def format_for_platforms(self, insights: str, key_info: Dict[str, Any]) -> Dict[str, str]:
        """步骤3：格式化为不同平台的内容"""
        logger.info("开始格式化内容...")

        try:
            # 并行处理不同平台的格式化
            platforms = ["wechat", "xiaohongshu"]
            formatted_content = {}

            for platform in platforms:
                response = self.client.chat.completions.create(
                    model="gpt-4o-mini",
                    messages=[
                        {"role": "system", "content": f"你是{platform}平台的内容编辑专家"},
                        {"role": "user", "content": f"""
                        将以下内容优化为适合{platform}平台的格式：

                        原始信息：{json.dumps(key_info, ensure_ascii=False, indent=2)}
                        观点评论：{insights}

                        要求：符合{platform}平台的风格和字数限制
                        """}
                    ],
                    temperature=0.8
                )

                formatted_content[platform] = response.choices[0].message.content

            logger.info("内容格式化完成")
            return formatted_content

        except Exception as e:
            logger.error(f"内容格式化失败: {e}")
            raise

    def execute(self, news_content: str) -> Dict[str, Any]:
        """执行完整工作流"""
        logger.info("开始执行新闻分析工作流...")

        try:
            # 步骤1：提取关键信息
            key_info = self.extract_key_info(news_content)

            # 步骤2：生成观点和评论
            insights = self.generate_insights(key_info)

            # 步骤3：格式化为不同平台的内容
            formatted_content = self.format_for_platforms(insights, key_info)

            # 整合最终结果
            final_result = {
                "key_info": key_info,
                "insights": insights,
                "formatted_content": formatted_content,
                "status": "success"
            }

            logger.info("工作流执行完成")
            return final_result

        except Exception as e:
            logger.error(f"工作流执行失败: {e}")
            return {
                "status": "error",
                "error_message": str(e)
            }


def main():
    """主函数：演示工作流使用"""
    # 示例新闻内容
    news_content = """
    GPT‑4o ("o" for "omni") is a step towards much more natural human-computer interaction—
    it accepts as input any combination of text, audio, image, and video and generates any 
    combination of text, audio, and image outputs. It can respond to audio inputs in as 
    little as 232 milliseconds, with an average of 320 milliseconds, which is similar to 
    human response time in a conversation.
    """

    # 创建工作流实例
    workflow = NewsAnalysisWorkflow()

    # 执行工作流
    result = workflow.execute(news_content)

    # 输出结果
    print(json.dumps(result, ensure_ascii=False, indent=2))


if __name__ == "__main__":
    main()
