#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
制裁分析模块 - 美国对华制裁监测预警技能
分析制裁原因、产业影响和风险传导路径

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

import json
from typing import Dict, List, Tuple, Optional
from dataclasses import dataclass
from collections import Counter, defaultdict


@dataclass
class SanctionPattern:
    """制裁模式"""
    name: str  # 模式名称
    description: str  # 描述
    target_industry: str  # 目标产业
    trigger_event: str  # 触发事件
    frequency: int  # 出现频率


@dataclass
class RiskPath:
    """风险传导路径"""
    source: str  # 风险源头
    intermediate: List[str]  # 中间节点
    target: str  # 风险目标
    impact_type: str  # 影响类型
    severity: str  # 严重程度


class SanctionsAnalyzer:
    """
    制裁分析器
    分析制裁原因、产业影响和风险传导路径
    """
    
    # 制裁原因分类
    SANCTION_REASONS = {
        "military_tech": ["军事", "武器", "军民两用", "国防"],
        "surveillance": ["监控", "监视", "侦察", "情报"],
        "human_rights": ["人权", "强迫劳动", "新疆", "西藏"],
        "cybersecurity": ["网络攻击", "黑客", "网络威胁"],
        "trade_dispute": ["贸易", "知识产权", "技术转让"]
    }
    
    # 产业分类
    INDUSTRIES = {
        "半导体": ["芯片", "半导体", "集成电路", "代工"],
        "通信": ["5G", "6G", "通信", "基站"],
        "AI": ["人工智能", "AI", "机器学习", "深度学习"],
        "量子": ["量子", "量子计算", "量子通信"],
        "生物": ["生物", "基因", "医疗", "制药"]
    }
    
    def __init__(self):
        """初始化制裁分析器"""
        self.entities = []
        self.sanction_patterns = []
        self.risk_paths = []
    
    def load_entities(self, entities: List[Dict]):
        """
        加载制裁实体数据
        
        Args:
            entities: 实体列表
        """
        self.entities = entities
    
    def classify_sanction_reason(self, reason: str) -> str:
        """
        分类制裁原因
        
        Args:
            reason: 制裁原因文本
            
        Returns:
            原因类别
        """
        reason_lower = reason.lower()
        
        for category, keywords in self.SANCTION_REASONS.items():
            if any(kw in reason_lower for kw in keywords):
                return category
        
        return "other"
    
    def classify_industry(self, entity_name: str, reason: str) -> str:
        """
        分类实体所属产业
        
        Args:
            entity_name: 实体名称
            reason: 制裁原因
            
        Returns:
            产业类别
        """
        combined = f"{entity_name} {reason}".lower()
        
        for industry, keywords in self.INDUSTRIES.items():
            if any(kw in combined for kw in keywords):
                return industry
        
        return "other"
    
    def identify_sanction_patterns(self) -> List[SanctionPattern]:
        """
        识别制裁模式
        
        Returns:
            SanctionPattern对象列表
        """
        # 统制裁裁原因和产业的组合
        combinations = Counter()
        
        for entity in self.entities:
            reason = entity.get("reason", "")
            name = entity.get("name", "")
            
            reason_category = self.classify_sanction_reason(reason)
            industry = self.classify_industry(name, reason)
            
            combinations[(reason_category, industry)] += 1
        
        # 生成制裁模式
        patterns = []
        for (reason_cat, industry), count in combinations.most_common(10):
            pattern = SanctionPattern(
                name=f"{reason_cat}_{industry}",
                description=f"因{reason_cat}原因对{industry}产业的制裁",
                target_industry=industry,
                trigger_event=reason_cat,
                frequency=count
            )
            patterns.append(pattern)
        
        self.sanction_patterns = patterns
        return patterns
    
    def identify_risk_paths(self) -> List[RiskPath]:
        """
        识别风险传导路径
        
        Returns:
            RiskPath对象列表
        """
        # TODO: 实际实现中，这里应该：
        # 1. 分析供应链关系
        # 2. 识别风险传导节点
        # 3. 评估影响程度
        
        # 示例风险路径
        paths = []
        
        return paths
    
    def analyze_industry_impact(self) -> Dict:
        """
        分析产业影响
        
        Returns:
            产业影响字典
        """
        # 统计各产业被制裁实体数量
        industry_counts = Counter()
        
        for entity in self.entities:
            name = entity.get("name", "")
            reason = entity.get("reason", "")
            industry = self.classify_industry(name, reason)
            industry_counts[industry] += 1
        
        # 计算影响比例
        total = sum(industry_counts.values())
        impact = {
            industry: {
                "entity_count": count,
                "percentage": count / total if total > 0 else 0
            }
            for industry, count in industry_counts.most_common()
        }
        
        return impact
    
    def generate_analysis_report(self) -> Dict:
        """
        生成分析报告
        
        Returns:
            分析报告字典
        """
        # 识别制裁模式
        patterns = self.identify_sanction_patterns()
        
        # 分析产业影响
        industry_impact = self.analyze_industry_impact()
        
        report = {
            "制裁模式识别": [
                {
                    "模式名称": p.name,
                    "描述": p.description,
                    "目标产业": p.target_industry,
                    "触发事件": p.trigger_event,
                    "出现频率": p.frequency
                }
                for p in patterns
            ],
            "产业影响分析": {
                industry: {
                    "实体数量": data["entity_count"],
                    "影响比例": f"{data['percentage']:.1%}"
                }
                for industry, data in industry_impact.items()
            },
            "统计信息": {
                "总实体数量": len(self.entities),
                "识别的制裁模式数": len(patterns),
                "涉及产业数": len(industry_impact)
            }
        }
        
        return report


def main():
    """测试制裁分析器"""
    analyzer = SanctionsAnalyzer()
    
    # 示例制裁实体数据
    entities = [
        {
            "name": "华为技术有限公司",
            "entity_id": "HUAWEI-001",
            "country": "China",
            "list_type": "Entity List",
            "added_date": "2020-05-15",
            "reason": "涉及5G通信设备，可能用于军事目的",
            "source": "BIS"
        },
        {
            "name": "中芯国际集成电路制造有限公司",
            "entity_id": "SMIC-001",
            "country": "China",
            "list_type": "Entity List",
            "added_date": "2020-12-18",
            "reason": "涉及先进半导体制造技术，可能用于军事",
            "source": "BIS"
        },
        {
            "name": "商汤科技有限公司",
            "entity_id": "SENSETIME-001",
            "country": "China",
            "list_type": "Entity List",
            "added_date": "2021-11-03",
            "reason": "涉及人工智能和面部识别技术，可能用于监控",
            "source": "BIS"
        }
    ]
    
    analyzer.load_entities(entities)
    
    # 生成报告
    print("=== 制裁分析报告 ===")
    report = analyzer.generate_analysis_report()
    print(json.dumps(report, ensure_ascii=False, indent=2))


if __name__ == "__main__":
    main()
