"""数据驱动的智能关怀方案生成系统"""

import streamlit as st
import pandas as pd
import numpy as np
import sys
import requests
from pathlib import Path

# 导入DeepSeek API调用函数
from src.smart_care_system import call_deepseek_api

# 添加项目根目录到Python路径
sys.path.append(str(Path(__file__).parent))

# 页面配置
st.set_page_config(
    page_title="数据驱动的智能关怀方案生成系统",
    page_icon="❤️",
    layout="wide"
)

# 航空主题样式
st.markdown("""
<style>
    /* 全局样式 */
    [data-testid="stAppViewContainer"] {
        background: linear-gradient(135deg, #e6f7ff 0%, #f0f8ff 100%);
    }
    
    /* 标题样式 */
    [data-testid="stTitle"] {
        color: #0066cc !important;
        font-weight: bold !important;
        text-align: center;
        padding: 20px 0;
    }
    
    /* 子标题样式 */
    .subheader {
        color: #004080 !important;
        border-left: 4px solid #0066cc;
        padding-left: 12px;
        margin: 20px 0 10px 0;
        font-size: 1.5rem !important;
        font-weight: 600 !important;
        position: relative;
    }
    
    .subheader::before {
        content: "✈";
        position: absolute;
        left: -20px;
        top: 0;
        color: #0066cc;
    }
    
    /* 卡片样式 */
    .card {
        background: white;
        border-radius: 12px;
        padding: 24px;
        box-shadow: 0 4px 12px rgba(0,0,0,0.08);
        margin-bottom: 24px;
        border-top: 4px solid #0066cc;
        transition: transform 0.3s ease, box-shadow 0.3s ease;
    }
    
    .card:hover {
        transform: translateY(-2px);
        box-shadow: 0 6px 16px rgba(0,0,0,0.12);
    }
    
    /* 按钮样式 */
    [data-testid="stButton"]>button {
        background: linear-gradient(135deg, #0066cc 0%, #004080 100%) !important;
        color: white !important;
        border-radius: 8px !important;
        border: none !important;
        padding: 10px 24px !important;
        font-weight: 600 !important;
        transition: all 0.3s ease !important;
    }
    
    [data-testid="stButton"]>button:hover {
        transform: translateY(-1px) !important;
        box-shadow: 0 4px 8px rgba(0,102,204,0.3) !important;
    }
    
    /* 进度条样式 */
    [data-testid="stProgress"]>div>div {
        background: linear-gradient(90deg, #0066cc 0%, #0099ff 100%) !important;
        border-radius: 4px !important;
    }
    
    /* 滑块样式 */
    [data-testid="stSlider"]>div>div {
        background-color: #e6f7ff !important;
    }
    
    [data-testid="stSlider"]>div>div>div {
        background: linear-gradient(135deg, #0066cc 0%, #0099ff 100%) !important;
        border: 2px solid white !important;
        box-shadow: 0 2px 4px rgba(0,0,0,0.2) !important;
    }
    
    /* 多选框样式 */
    [data-testid="stMultiSelect"]>div>div {
        background: white !important;
        border-radius: 8px !important;
        box-shadow: 0 2px 4px rgba(0,0,0,0.1) !important;
        border: 1px solid #e6f7ff !important;
    }
    
    /* 信息提示样式 */
    [data-testid="stInfo"] {
        background: linear-gradient(135deg, #e6f7ff 0%, #f0f8ff 100%) !important;
        border-left: 4px solid #0066cc !important;
        border-radius: 8px !important;
        box-shadow: 0 2px 4px rgba(0,0,0,0.08) !important;
    }
    
    /* 成功提示样式 */
    [data-testid="stSuccess"] {
        background: linear-gradient(135deg, #e6f7ff 0%, #f0f8ff 100%) !important;
        border-left: 4px solid #0066cc !important;
        border-radius: 8px !important;
        box-shadow: 0 2px 4px rgba(0,0,0,0.08) !important;
    }
    
    /* 错误提示样式 */
    [data-testid="stError"] {
        background: linear-gradient(135deg, #fff0f0 0%, #ffe6e6 100%) !important;
        border-left: 4px solid #ff4444 !important;
        border-radius: 8px !important;
        box-shadow: 0 2px 4px rgba(0,0,0,0.08) !important;
    }
    
    /* 页脚样式 */
    footer {
        background: linear-gradient(135deg, #004080 0%, #0066cc 100%) !important;
        color: white !important;
        padding: 20px !important;
        border-radius: 8px !important;
        margin-top: 40px !important;
    }
    
    /* 问卷问题样式 */
    .question-item {
        background: #f8faff;
        border-radius: 8px;
        padding: 16px;
        margin-bottom: 12px;
        border-left: 3px solid #0066cc;
    }
    
    /* 关怀方案展示样式 */
    .care-plan {
        background: linear-gradient(135deg, #f8faff 0%, #e6f7ff 100%);
        border-radius: 12px;
        padding: 24px;
        border: 1px solid #b3d9ff;
        box-shadow: 0 2px 8px rgba(0,102,204,0.1);
    }
</style>
""", unsafe_allow_html=True)

# 页面标题
st.markdown('<h1 style="color: #0066cc; text-align: center; font-weight: bold; padding: 20px 0;">❤️ 数据驱动的智能关怀方案生成系统</h1>', unsafe_allow_html=True)

# 系统介绍
st.markdown('<div class="card"><h2 class="subheader">系统概述</h2><p>本系统基于真实推文数据分析，总结出用户最关心的问题，为用户生成个性化的关怀方案。</p></div>', unsafe_allow_html=True)

# 显示数据来源说明
st.info(
    "💡 说明：问卷问题基于对真实航空服务推文的分析，总结出用户最常提到的问题类型。"
)

# 从推文分析中得到的前13个最常见问题
common_problems = [
    "服务态度",
    "延误",
    "客服支持",
    "取消",
    "飞机状况",
    "行李服务",
    "登机",
    "座位",
    "改签",
    "中转",
    "设施",
    "餐食",
    "超售"
]

# step 1 ：用户偏好问卷
st.markdown('<div class="card"><h2 class="subheader">📝 步骤1：用户偏好问卷</h2></div>', unsafe_allow_html=True)

# 基本问题
st.markdown('<div class="card"><h3 style="color: #004080;">请对以下服务问题的关注度评分（1-5分，1分最低，5分最高）：</h3></div>', unsafe_allow_html=True)

# 使用动态列布局，根据屏幕宽度自动调整
if st.session_state.get('columns') is None:
    st.session_state.columns = 3  # 默认3列

# 动态创建评分滑块
user_ratings = {}

# 创建n列布局
cols = st.columns(st.session_state.columns)

# 为每个问题创建评分滑块
for i, problem in enumerate(common_problems):
    with cols[i % st.session_state.columns]:
        user_ratings[problem] = st.slider(
            problem,
            1, 5, 3,  # 范围1-5，默认3
            key=problem
        )

# 其他问题
st.markdown('<div class="card"><h3 style="color: #004080;">其他问题：</h3></div>', unsafe_allow_html=True)

communication_channels = st.multiselect(
    "您希望航空公司如何与您沟通服务问题？",
    ["短信", "邮件", "电话", "APP推送"],
    key="communication_channels"
)

# 收集用户响应
user_responses = {
    "common_problems": user_ratings,
    "communication_channels": communication_channels
}

# step 2：生成关怀方案
st.markdown('<div class="card"><h2 class="subheader">🎯 步骤2：生成关怀方案</h2></div>', unsafe_allow_html=True)

if st.button("生成专属关怀方案", type="primary", use_container_width=True):
    with st.spinner("正在调用智能分析模型生成个性化关怀方案..."):
        # 计算各问题的优先级权重
        total_score = sum(user_ratings.values())
        priority_weights = {problem: score/total_score for problem, score in user_ratings.items()}
        
        # 找出用户最关心的前5个问题
        top_problems = sorted(user_ratings.items(), key=lambda x: x[1], reverse=True)[:5]
        
        # 准备DeepSeek提示词
        prompt = f"""
        作为专业的航空服务关怀方案专家，请根据以下用户偏好数据生成个性化关怀方案：
        
        用户对各服务问题的关注度评分（1-5分）：
        {user_ratings}
        
        用户最关心的前5个问题：
        {[(problem, score) for problem, score in top_problems]}
        
        用户偏好的沟通方式：
        {communication_channels}
        
        请生成一个结构化的个性化关怀方案，包含：
        1. 方案概述
        2. 针对每个高关注度问题的具体关怀措施
        3. 实施优先级
        4. 预期效果
        5. 沟通方式建议
        
        方案应具有专业性、针对性和可操作性，语言友好易懂。
        """
        
        # 调用DeepSeek API生成方案
        care_plan = call_deepseek_api(prompt, max_tokens=1000, temperature=0.7)
        
        if care_plan:
            st.success("个性化关怀方案生成完成！")
            
            # 显示用户最关心的问题和优先级权重
            col1, col2 = st.columns(2)
            
            with col1:
                st.markdown('<div class="card"><h3 style="color: #004080;">👤 您最关心的问题</h3></div>', unsafe_allow_html=True)
                for i, (problem, score) in enumerate(top_problems, 1):
                    st.write(f"{i}. {problem}: {score}/5分")
            
            # 显示优先级权重分布
            with col2:
                st.markdown('<div class="card"><h3 style="color: #004080;">⚖️ 问题优先级权重</h3></div>', unsafe_allow_html=True)
                for problem, weight in sorted(priority_weights.items(), key=lambda x: x[1], reverse=True)[:5]:
                    st.progress(weight, text=f"{problem}: {weight*100:.1f}%")
            
            # 显示生成的关怀方案
            st.markdown('<div class="card"><h3 class="subheader">🎁 个性化关怀方案</h3></div>', unsafe_allow_html=True)
            st.markdown(f'<div class="care-plan">{care_plan}</div>', unsafe_allow_html=True)
        else:
            st.error("方案生成失败，请稍后重试。")
            st.info("如果问题持续存在，可能是网络连接问题或API调用限制。")

# 页脚
st.markdown('<footer><p style="text-align: center; color: white; margin: 0;">© 2026 数据驱动的智能关怀方案生成系统 | 基于真实推文数据分析</p></footer>', unsafe_allow_html=True)
