#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
报告生成模块 - 人物画像技能
生成结构化的人物画像分析报告

创建时间：2026-04-03
开发者：瞰宇 (Kàn Yǔ)
"""

import json
from typing import Dict, List, Optional
from datetime import datetime


class ReportGenerator:
    """
    报告生成器
    生成结构化的人物画像分析报告
    """
    
    def __init__(self):
        """初始化报告生成器"""
        self.analysis_results = {}
    
    def load_analysis_results(self, results: Dict):
        """
        加载分析结果
        
        Args:
            results: 各模块的分析结果
        """
        self.analysis_results = results
    
    def generate_markdown_report(self, person_name: str) -> str:
        """
        生成Markdown格式报告
        
        Args:
            person_name: 人物姓名
            
        Returns:
            Markdown格式报告
        """
        md = []
        
        # 报告标题
        md.append(f"# 人物画像分析报告：{person_name}\n")
        md.append(f"> **生成时间：** {datetime.now().strftime('%Y-%m-%d %H:%M:%S GMT+8')}")
        md.append(f"> **分析工具：** 开源情报-人物画像技能 v1.0.0")
        md.append(f"> **开发者：** 瞰宇 (Kàn Yǔ)")
        md.append("")
        
        # 第一章：政治立场与意识形态深度剖析
        md.append("---\n")
        md.append("# 第一章：政治立场与意识形态深度剖析\n")
        
        if "text_analyzer" in self.analysis_results:
            text_result = self.analysis_results["text_analyzer"]
            
            md.append("## 1.1 政治光谱定位\n")
            spectrum = text_result.get("政治光谱坐标", {})
            md.append("| 维度 | 得分 | 解读 |")
            md.append("|------|------|------|")
            
            interpretation = text_result.get("立场解读", {})
            
            for key, value in spectrum.items():
                interp = interpretation.get(key, "未分析")
                md.append(f"| {key} | {value:.2f} | {interp} |")
            md.append("")
            
            md.append("## 1.2 政策立场矩阵\n")
            md.append("> （需要更多数据支持，建议完善政策立场分析模块）\n")
            md.append("")
            
            md.append("## 1.3 意识形态演变轨迹\n")
            evolution = text_result.get("立场演变轨迹", [])
            if evolution:
                for e in evolution:
                    md.append(f"### {e['时间段']}")
                    md.append(f"- 政治光谱坐标：{json.dumps(e['光谱坐标'], ensure_ascii=False)}")
                    md.append(f"- 描述：{e['描述']}")
                    md.append("")
            else:
                md.append("> 暂无演变轨迹数据\n")
            md.append("")
        
        # 第二章：媒体形象与公众认知分析
        md.append("---\n")
        md.append("# 第二章：媒体形象与公众认知分析\n")
        
        if "media_analyzer" in self.analysis_results:
            media_result = self.analysis_results["media_analyzer"]
            
            md.append("## 2.1 媒体叙事框架分析\n")
            frameworks = media_result.get("媒体框架分析", {})
            
            for media_type, media_list in frameworks.items():
                md.append(f"### {media_type}\n")
                if media_list:
                    for media in media_list[:3]:  # 只显示前3个
                        md.append(f"**{media['媒体名称']}**")
                        md.append(f"- 主导框架：{media['主导框架']}")
                        md.append(f"- 情感分布：正面 {media['情感分布'].get('positive', 0):.1%} / 中立 {media['情感分布'].get('neutral', 0):.1%} / 负面 {media['情感分布'].get('negative', 0):.1%}")
                        md.append("")
                else:
                    md.append(f"> 暂无{media_type}数据\n")
                    md.append("")
            
            md.append("## 2.2 跨媒体共识与分歧\n")
            consensus = media_result.get("跨媒体共识", {})
            md.append(f"**共识标签：** {', '.join(consensus.get('共识标签', [])) or '无'}")
            md.append(f"**分歧点：** {', '.join(consensus.get('分歧点', [])) or '无'}")
            md.append(f"**极化分数：** {consensus.get('极化分数', 0)}")
            md.append("")
        
        if "public_opinion_analyzer" in self.analysis_results:
            opinion_result = self.analysis_results["public_opinion_analyzer"]
            
            md.append("## 2.3 公众情绪分析\n")
            emotion_dist = opinion_result.get("情感分布", {})
            md.append("| 维度 | 比例 |")
            md.append("|------|------|")
            for key, value in emotion_dist.items():
                md.append(f"| {key} | {value} |")
            md.append("")
            
            md.append("## 2.4 支持率估算\n")
            support_rates = opinion_result.get("支持率估算", {})
            for key, value in support_rates.items():
                md.append(f"- **{key}：** {value}")
            md.append("")
        
        # 第三章：心理特征与行为模式研判
        md.append("---\n")
        md.append("# 第三章：心理特征与行为模式研判\n")
        
        if "psychology_analyzer" in self.analysis_results:
            psych_result = self.analysis_results["psychology_analyzer"]
            
            md.append("## 3.1 心理特征推断\n")
            
            big_five = psych_result.get("大五人格特质", {})
            md.append("### 大五人格特质\n")
            md.append("| 维度 | 得分 |")
            md.append("|------|------|")
            for key, value in big_five.items():
                md.append(f"| {key} | {value} |")
            md.append("")
            
            machiavellianism = psych_result.get("马基雅维利主义", {})
            md.append("### 马基雅维利主义倾向\n")
            md.append("| 维度 | 得分 |")
            md.append("|------|------|")
            for key, value in machiavellianism.items():
                md.append(f"| {key} | {value} |")
            md.append("")
            
            leadership = psych_result.get("领导风格", {})
            md.append("### 领导风格\n")
            md.append(f"- **主导风格：** {leadership.get('主导风格', '未知')}")
            md.append(f"- **次要风格：** {leadership.get('次要风格', '未知')}")
            md.append(f"- **特征：** {', '.join(leadership.get('特征', []))}")
            md.append("")
            
            warning = psych_result.get("警告", "")
            if warning:
                md.append(f"> ⚠️ **{warning}**\n")
            md.append("")
        
        if "behavior_analyzer" in self.analysis_results:
            behavior_result = self.analysis_results["behavior_analyzer"]
            
            md.append("## 3.2 行为模式识别\n")
            action_patterns = behavior_result.get("行动模式", {})
            md.append("### 行动模式\n")
            for key, value in action_patterns.items():
                md.append(f"- **{key}：** {value}")
            md.append("")
            
            adaptation = behavior_result.get("适应性分析", {})
            md.append("### 适应性分析\n")
            for key, value in adaptation.items():
                md.append(f"- **{key}：** {value}")
            md.append("")
        
        # 第四章：资源网络与影响力评估
        md.append("---\n")
        md.append("# 第四章：资源网络与影响力评估\n")
        md.append("> （需要更多数据支持，建议完善资源网络分析模块）\n")
        md.append("")
        
        # 对策建议
        md.append("---\n")
        md.append("# 对策建议\n")
        md.append("## 总体接触/应对原则\n")
        md.append("基于以上分析，建议采取以下策略之一或组合：")
        md.append("")
        md.append("1. **接触** - 建立联系，开展对话")
        md.append("2. **合作** - 寻求共同利益，建立联盟")
        md.append("3. **防范** - 监测威胁，建立防线")
        md.append("4. **遏制** - 限制其影响力，反制其行动")
        md.append("5. **影响** - 间接引导，塑造其行为环境")
        md.append("6. **忽略** - 资源有限，优先级低")
        md.append("")
        
        md.append("## 具体策略建议\n")
        md.append("> （需要基于具体分析结果生成具体建议）\n")
        md.append("")
        
        # 报告尾部
        md.append("---\n")
        md.append(f"**报告生成时间：** {datetime.now().strftime('%Y-%m-%d %H:%M:%S GMT+8')}")
        md.append(f"**分析工具：** 开源情报-人物画像技能 v1.0.0")
        md.append("")
        md.append("---\n")
        md.append("**瞰宇 | 穿越数字国了界，瞭望全球局势 · 解构认知域，守护认知安全**")
        
        return "\n".join(md)
    
    def generate_json_report(self, person_name: str) -> Dict:
        """
        生成JSON格式报告
        
        Args:
            person_name: 人物姓名
            
        Returns:
            JSON格式报告
        """
        report = {
            "report_meta": {
                "title": f"人物画像分析报告：{person_name}",
                "generated_at": datetime.now().isoformat(),
                "tool": "开源情报-人物画像技能 v1.0.0",
                "developer": "瞰宇 (Kàn Yǔ)"
            },
            "chapter_1": {
                "title": "政治立场与意识形态深度剖析",
                "content": self.analysis_results.get("text_analyzer", {})
            },
            "chapter_2": {
                "title": "媒体形象与公众认知分析",
                "media_analysis": self.analysis_results.get("media_analyzer", {}),
                "public_opinion": self.analysis_results.get("public_opinion_analyzer", {})
            },
            "chapter_3": {
                "title": "心理特征与行为模式研判",
                "psychology": self.analysis_results.get("psychology_analyzer", {}),
                "behavior": self.analysis_results.get("behavior_analyzer", {})
            },
            "chapter_4": {
                "title": "资源网络与影响力评估",
                "content": "需要更多数据支持"
            },
            "recommendations": {
                "title": "对策建议",
                "content": "需要基于具体分析结果生成具体建议"
            }
        }
        
        return report


def main():
    """测试报告生成器"""
    generator = ReportGenerator()
    
    # 示例分析结果
    analysis_results = {
        "text_analyzer": {
            "政治光谱坐标": {
                "经济立场": 0.35,
                "社会立场": -0.21,
                "国际立场": 0.68,
                "干预立场": 0.52
            },
            "立场解读": {
                "经济立场": "中正向",
                "社会立场": "中负向",
                "国际立场": "强正向",
                "干预立场": "中正向"
            },
            "立场演变轨迹": []
        },
        "media_analyzer": {
            "媒体框架分析": {},
            "跨媒体共识": {
                "共识标签": ["民粹主义"],
                "分歧点": ["极左", "极右"],
                "极化分数": 0.75
            }
        },
        "public_opinion_analyzer": {
            "情感分布": {
                "正面": "32.0%",
                "中立": "28.0%",
                "负面": "40.0%",
                "强烈情绪占比": "65.0%"
            },
            "支持率估算": {
                "整体支持率": "32.0%",
                "反对比例": "40.0%",
                "中立比例": "28.0%",
                "极化指数": "0.08"
            }
        },
        "psychology_analyzer": {
            "大五人格特质": {
                "开放性": "2.1/5.0",
                "尽责性": "4.3/5.0",
                "外向性": "4.6/5.0",
                "宜人性": "2.4/5.0",
                "神经质": "3.9/5.0"
            },
            "马基雅维利主义": {
                "权力导向": "4.0/5.0",
                "操纵倾向": "3.5/5.0",
                "交易倾向": "4.2/5.0"
            },
            "领导风格": {
                "主导风格": "专制型",
                "次要风格": "魅力型",
                "特征": ["高度集权", "快速决策", "强情感动员"]
            },
            "警告": "心理推断基于公开信息，存在不确定性。"
        },
        "behavior_analyzer": {
            "行动模式": {
                "激进程度": "高",
                "对抗性": "是",
                "曝光偏好": "高调",
                "合作模式": "零和"
            },
            "适应性分析": {
                "面对失败的反应": "外归因",
                "面对成功的反应": "自归因",
                "面对批评的反应": "对抗性回应"
            }
        }
    }
    
    generator.load_analysis_results(analysis_results)
    
    # 生成Markdown报告
    print("=== Markdown报告 ===")
    md_report = generator.generate_markdown_report("示例人物")
    print(md_report[:1000])  # 只打印前1000字符
    
    # 生成JSON报告
    print("\n=== JSON报告 ===")
    json_report = generator.generate_json_report("示例人物")
    print(json.dumps(json_report, ensure_ascii=False, indent=2)[:1000])  # 只打印前1000字符


if __name__ == "__main__":
    main()
