import os
import json
import time
import requests
from dotenv import load_dotenv
import pandas as pd
import numpy as np

class DeepSeekIntegrator:
    def __init__(self, api_key=None):
        self.api_key = api_key
        self.base_url = "https://api.deepseek.com/v1/chat/completions"
        
        # 如果没有提供API密钥，尝试从环境变量加载
        if not api_key:
            load_dotenv()
            self.api_key = os.getenv("DEEPSEEK_API_KEY")
        
        # 模拟数据 - 实际使用时替换为真实API调用
        self.similar_cases = self._load_similar_cases()
    
    def _load_similar_cases(self):
        """加载模拟的相似历史案例数据"""
        return [
            {
                "case_id": "case_001",
                "date": "2023-05-15",
                "event": "航班大面积延误引发乘客大规模投诉",
                "airline": "美国航空公司",
                "duration": "48小时",
                "impact": "影响12000名乘客，社交媒体负面情绪指数上升85%",
                "response_strategy": "快速道歉、提供赔偿、增加客服人员",
                "outcome": "3天后负面情绪指数下降60%，客户满意度恢复到延误前水平",
                "lessons": "及时透明的沟通和实质性赔偿是缓解危机的关键"
            },
            {
                "case_id": "case_002",
                "date": "2023-08-22",
                "event": "行李丢失问题引发社交媒体广泛关注",
                "airline": "达美航空",
                "duration": "72小时",
                "impact": "1500件行李丢失，#DeltaLosesLuggage话题登上Twitter热搜",
                "response_strategy": "立即启动行李追踪系统、提供双倍赔偿、CEO公开道歉",
                "outcome": "5天后大部分行李找回，负面话题热度下降75%",
                "lessons": "技术解决方案结合高层领导力展示能有效重建信任"
            },
            {
                "case_id": "case_003",
                "date": "2024-01-10",
                "event": "机上服务质量问题引发乘客不满",
                "airline": "美联航",
                "duration": "96小时",
                "impact": "社交媒体投诉量增加300%，客户评分下降1.2分",
                "response_strategy": "开展服务质量培训、推出客户反馈奖励计划、更新机上设施",
                "outcome": "2周后服务质量投诉减少80%，客户评分回升",
                "lessons": "长期改进措施比短期公关更能解决根本问题"
            }
        ]
    
    def _call_api(self, prompt, max_tokens=1000, temperature=0.7):
        """调用DeepSeek API"""
        # 确保API密钥已配置
        if not self.api_key:
            raise ValueError("DeepSeek API密钥未配置")
        
        # 实际API调用代码
        headers = {
            "Authorization": f"Bearer {self.api_key}",
            "Content-Type": "application/json"
        }
        payload = {
            "model": "deepseek-chat",
            "messages": [{"role": "user", "content": prompt}],
            "max_tokens": max_tokens,
            "temperature": temperature
        }
        
        try:
            response = requests.post(self.base_url, headers=headers, json=payload, timeout=30)
            response.raise_for_status()  # 检查HTTP错误
            return response.json()
        except requests.exceptions.RequestException as e:
            # 错误处理：打印错误信息并返回模拟结果作为降级方案
            print(f"DeepSeek API调用失败: {str(e)}")
            
            # 返回模拟结果作为降级方案
            if "历史案例" in prompt or "相似事件" in prompt:
                return {
                    "choices": [{"message": {"content": json.dumps(self.similar_cases, ensure_ascii=False)}}]
                }
            elif "公关声明" in prompt or "道歉信" in prompt:
                return {
                    "choices": [{"message": {"content": self._generate_pr_statement(prompt)}}]
                }
            elif "传播路径" in prompt or "影响预测" in prompt:
                return {
                    "choices": [{"message": {"content": self._predict_propagation(prompt)}}]
                }
            else:
                return {
                    "choices": [{"message": {"content": "API调用失败，返回模拟响应。"}}]
                }
    
    def analyze_similar_cases(self, current_event):
        """分析相似历史案例"""
        prompt = f"""
        请分析以下航空公司危机事件，并找出3个最相似的历史案例：
        
        当前事件：{current_event}
        
        请提供每个相似案例的详细信息，包括：
        1. 事件描述
        2. 发生时间
        3. 涉及航空公司
        4. 影响范围
        5. 应对策略
        6. 处理结果
        7. 经验教训
        
        请以JSON格式返回结果，确保包含以上所有字段。
        """
        
        response = self._call_api(prompt)
        return json.loads(response["choices"][0]["message"]["content"])
    
    def generate_pr_statement(self, event_details, target_audience="乘客", tone="道歉且负责任"):
        """生成危机公关声明"""
        prompt = f"""
        请为以下航空公司危机事件生成一份公关声明：
        
        事件详情：{event_details}
        目标受众：{target_audience}
        语气要求：{tone}
        
        声明应包含以下要素：
        1. 真诚道歉
        2. 事件简要说明
        3. 公司已采取的措施
        4. 后续改进计划
        5. 联系方式（模拟）
        
        请确保声明专业、诚恳，符合危机公关最佳实践。
        """
        
        response = self._call_api(prompt)
        return response["choices"][0]["message"]["content"]
    
    def predict_propagation(self, current_event, initial_impact):
        """预测负面情绪可能的传播路径和影响"""
        prompt = f"""
        请分析以下航空公司危机事件，并预测其负面情绪可能的传播路径和影响：
        
        当前事件：{current_event}
        初始影响：{initial_impact}
        
        请预测：
        1. 传播速度和范围
        2. 可能受影响的关键群体
        3. 潜在的媒体关注点
        4. 预计持续时间
        5. 可能的长期影响
        6. 建议的干预措施
        
        请提供详细的分析和具体的预测数据。
        """
        
        response = self._call_api(prompt)
        return response["choices"][0]["message"]["content"]
    
    def _generate_pr_statement(self, prompt):
        """模拟生成公关声明"""
        return """
# 关于近期航班延误的道歉声明

尊敬的各位乘客：

首先，我们谨代表XX航空公司，就近期因天气原因导致的大规模航班延误事件，向所有受到影响的乘客表示最诚挚的歉意。

**事件说明：**
自2025年1月13日起，我国东南部地区遭遇极端天气，导致多个主要机场航班大面积延误或取消。截至目前，我们已有超过500个航班受到影响，约8万名乘客的出行计划被打乱。

**我们已采取的措施：**
1. 启动24小时应急响应机制，增派客服人员处理乘客咨询
2. 为受影响的乘客提供免费餐食、住宿和改期服务
3. 开放所有贵宾休息室供延误乘客使用
4. 对行程延误超过6小时的乘客提供额外赔偿

**后续改进计划：**
1. 升级天气预报系统，提高极端天气预警能力
2. 优化航班调度算法，增强航班恢复能力
3. 增加备用运力，以应对突发情况
4. 建立更完善的乘客沟通机制，确保信息透明及时

我们深知此次事件给大家带来了极大的不便和困扰，我们将以此为鉴，不断提升服务质量和应急处理能力。

如有任何问题，请联系我们的24小时客服热线：400-888-8888，或通过官方APP、微信公众号获取最新信息。

再次向所有受到影响的乘客表示深深的歉意，感谢您的理解与支持！

XX航空公司
2025年1月15日
        """
    
    def _predict_propagation(self, prompt):
        """模拟预测传播路径"""
        return """
# 负面情绪传播路径与影响预测分析

## 1. 传播速度和范围
- **初期（0-12小时）**：负面情绪主要集中在受直接影响的乘客群体，预计在Twitter、Facebook等社交平台上产生约5000条相关帖子
- **中期（12-48小时）**：媒体开始介入报道，预计话题热度将上升300%，相关帖子数量达到2万条左右
- **后期（48-72小时）**：如果处理不当，负面情绪将扩散至普通公众，预计影响范围扩大到500万以上社交媒体用户

## 2. 可能受影响的关键群体
- 直接受影响的乘客及其亲友
- 计划近期乘坐该航空公司航班的潜在乘客
- 航空业分析人士和媒体
- 航空公司股东和投资者

## 3. 潜在的媒体关注点
- 航班延误的具体原因和持续时间
- 航空公司的应急处理措施是否到位
- 乘客的实际体验和反馈
- 类似事件的历史记录
- 赔偿政策的执行情况

## 4. 预计持续时间
- 如果采取有效措施：危机将在3-5天内得到控制，7-10天内基本平息
- 如果处理不当：危机可能持续2-3周，甚至对品牌形象造成长期影响

## 5. 可能的长期影响
- 品牌声誉受损：客户满意度可能下降15-20%
- 市场份额流失：预计将流失2-5%的乘客
- 财务影响：直接经济损失预计在500-1000万元之间

## 6. 建议的干预措施
- **立即行动**：发布真诚的道歉声明，提供具体的赔偿方案
- **透明沟通**：每6小时更新一次事件进展和解决方案
- **高层参与**：公司CEO或高管出面回应，展示解决问题的决心
- **长期改进**：公布具体的改进措施，重建公众信任
- **监测评估**：持续监测社交媒体情绪变化，及时调整应对策略
        """

# 示例用法
if __name__ == "__main__":
    print("初始化DeepSeek集成器...")
    integrator = DeepSeekIntegrator()
    print("DeepSeek集成器初始化完成!")
    
    # 测试相似案例分析
    print("\n=== 测试相似案例分析 ===")
    current_event = "航班延误问题引发乘客大规模投诉，已影响超过5000名乘客，社交媒体负面情绪高涨"
    cases = integrator.analyze_similar_cases(current_event)
    for i, case in enumerate(cases, 1):
        print(f"\n相似案例 #{i}:")
        print(f"事件: {case['event']}")
        print(f"航空公司: {case['airline']}")
        print(f"应对策略: {case['response_strategy']}")
        print(f"结果: {case['outcome']}")
    
    # 测试公关声明生成
    print("\n=== 测试公关声明生成 ===")
    event_details = "因天气原因，我公司今日有200多个航班延误，影响乘客约3000人"
    pr_statement = integrator.generate_pr_statement(event_details)
    print(pr_statement)
    
    # 测试传播预测
    print("\n=== 测试传播预测 ===")
    initial_impact = "目前已有500名乘客在社交媒体上表达不满，相关话题讨论量达到1000条"
    propagation = integrator.predict_propagation(current_event, initial_impact)
    print(propagation)
