"""服务体验DNA解码Agent系统"""

import asyncio
from typing import List, Dict, Optional
from pydantic import BaseModel, Field
from pydantic_ai import Agent
from dna_decoder import DNADecoder, DNAResult, ServiceExperienceInsight


class DNAAnalysisRequest(BaseModel):
    """DNA分析请求"""
    tweet_text: str = Field(description="推文内容")
    airline: str = Field(description="航空公司")
    analysis_depth: str = Field(description="分析深度", default="standard")


class DNAInterpretation(BaseModel):
    """DNA解释结果"""
    问题分类: str = Field(description="主要问题分类")
    情感深度: str = Field(description="情感深度分析")
    隐性模式: List[str] = Field(description="发现的隐性模式")
    关联问题: List[str] = Field(description="关联的问题类型")
    根本原因: str = Field(description="推测的根本原因")


class DNADisposalPlan(BaseModel):
    """DNA处置方案"""
    紧急程度: str = Field(description="紧急程度")
    处置策略: str = Field(description="整体处置策略")
    具体措施: List[str] = Field(description="具体处置措施")
    预防建议: List[str] = Field(description="预防建议")
    跟进计划: str = Field(description="跟进计划")


class DNAAgentResult(BaseModel):
    """DNA Agent结果"""
    分析摘要: str = Field(description="分析摘要")
    深度解释: DNAInterpretation = Field(description="深度解释")
    处置方案: DNADisposalPlan = Field(description="处置方案")
    洞察发现: List[str] = Field(description="关键洞察发现")


# 创建DNA解码Agent
dna_agent = Agent(
    'deepseek:deepseek-chat',
    system_prompt="""
    你是航空公司服务体验DNA解码专家，专门分析客户反馈中的深层模式和隐性不满。
    
    你的任务：
    1. 基于DNA解码系统的分析结果，进行深度解释
    2. 识别客户反馈中的隐性模式和关联关系
    3. 生成针对性的处置方案和预防建议
    4. 提供基于数据分析的洞察发现
    
    分析要点：
    - 关注情感强度的细微变化
    - 识别未直接表达的隐性不满
    - 发现问题的关联性和模式
    - 提供数据驱动的解决方案
    
    输出必须是结构化的JSON格式。
    """,
    output_type=DNAAgentResult
)


class DNAAgentSystem:
    """DNA Agent系统"""
    
    def __init__(self):
        self.dna_decoder = DNADecoder()
        self.agent = dna_agent
    
    async def analyze_tweet_dna(self, tweet_text: str, airline: str = "unknown") -> DNAAgentResult:
        """分析推文DNA"""
        
        # 第一步：DNA解码分析
        dna_result = self.dna_decoder.decode_experience_dna(tweet_text)
        
        # 第二步：Agent深度解释和处置方案生成
        agent_result = await self.agent.run(
            f"""
            请基于以下DNA解码结果，生成深度解释和处置方案：
            
            推文内容: "{tweet_text}"
            航空公司: {airline}
            
            DNA解码结果:
            - 情感强度: {dna_result.推文分析.情感强度:.3f}
            - 隐性不满: {'是' if dna_result.推文分析.隐性不满 else '否'}
            - 主要主题: {list(dna_result.推文分析.主题分布.keys())[:3] if dna_result.推文分析.主题分布 else []}
            - 关键洞察: {dna_result.推文分析.关键洞察}
            
            整体洞察摘要:
            {self._format_insights(dna_result.整体洞察)}
            
            请提供：
            1. 深度的问题分类和情感分析
            2. 发现的隐性模式和关联关系
            3. 针对性的处置方案
            4. 基于数据的洞察发现
            """
        )
        
        return agent_result
    
    def _format_insights(self, insights: List[ServiceExperienceInsight]) -> str:
        """格式化洞察信息"""
        if not insights:
            return "暂无整体洞察数据"
        
        formatted = []
        for insight in insights[:3]:  # 只显示前3个关键洞察
            formatted.append(
                f"- {insight.主题名称}: 情感强度{insight.情感强度:.2f}, "
                f"隐性不满{insight.隐性不满指标:.2f}"
            )
        
        return "\n".join(formatted)
    
    def get_visualization_data(self, tweet_text: str) -> Dict:
        """获取可视化数据"""
        dna_result = self.dna_decoder.decode_experience_dna(tweet_text)
        
        # 主题分布数据
        topic_data = {
            'topics': list(dna_result.推文分析.主题分布.keys()),
            'probabilities': list(dna_result.推文分析.主题分布.values())
        }
        
        # 情感强度数据
        sentiment_data = {
            'intensity': dna_result.推文分析.情感强度,
            'is_negative': dna_result.推文分析.情感强度 < 0,
            'implicit_dissatisfaction': dna_result.推文分析.隐性不满
        }
        
        # 关联问题数据
        association_data = {
            'problems': dna_result.推文分析.问题关联,
            'count': len(dna_result.推文分析.问题关联)
        }
        
        return {
            'topic_distribution': topic_data,
            'sentiment_analysis': sentiment_data,
            'problem_association': association_data,
            'insights': dna_result.整体洞察,
            'recommendations': dna_result.处置建议
        }


# 创建全局实例
dna_agent_system = DNAAgentSystem()


async def analyze_service_experience_dna(tweet_text: str, airline: str = "unknown") -> DNAAgentResult:
    """分析服务体验DNA"""
    return await dna_agent_system.analyze_tweet_dna(tweet_text, airline)


def get_dna_visualization_data(tweet_text: str) -> Dict:
    """获取DNA可视化数据"""
    return dna_agent_system.get_visualization_data(tweet_text)


# 测试函数
async def test_dna_agent():
    """测试DNA Agent系统"""
    test_tweet = "@United my flight was delayed for 3 hours and the food was terrible. Very disappointing experience."
    
    try:
        result = await analyze_service_experience_dna(test_tweet, "united")
        print("DNA Agent测试成功!")
        print(f"分析摘要: {result.分析摘要}")
        print(f"问题分类: {result.深度解释.问题分类}")
        print(f"处置策略: {result.处置方案.处置策略}")
        return True
    except Exception as e:
        print(f"DNA Agent测试失败: {e}")
        return False


if __name__ == "__main__":
    # 运行测试
    asyncio.run(test_dna_agent())