# agent/tools/general_chat.py
from langchain.tools import tool
from typing import Dict, Any, Optional
from common.vanna_instance import get_vanna_instance
from core.logging import get_agent_logger

# Initialize logger
logger = get_agent_logger("GeneralChat")

@tool
def general_chat(question: str, context: Optional[str] = None) -> Dict[str, Any]:
    """
    处理一般性对话和咨询。
    
    Args:
        question: 用户的问题或对话内容
        context: 上下文信息，可选
        
    Returns:
        包含聊天响应的字典，格式：
        {
            "success": bool,
            "response": str,
            "error": str或None
        }
    """
    try:
        logger.info(f"处理聊天问题: {question}")
        
        system_prompt = """
你是Citu智能数据问答平台的AI助手，为用户提供全面的帮助和支持。

你的职责包括：
1. 回答关于平台功能和使用方法的问题
2. 解释数据分析相关的概念和术语
3. 提供操作指导和建议
4. 进行友好的日常对话
5. 回答用户的各类知识问题和常识咨询

回答原则：
- 保持友好、专业、热情的语调
- 提供准确、有用的信息
- 对于通用知识问题，尽量给出准确回答
- 如果不确定某个问题，诚实地表达不确定性
- 适时鼓励用户尝试数据查询功能
- 回答要简洁明了，避免过于冗长
- 保持中文回答，语言自然流畅
- 以帮助用户为目标，不要过度限制回答范围
"""
        
        # 构建完整的问题（如果有上下文）
        if context:
            full_question = f"上下文信息：{context}\n\n用户问题：{question}"
        else:
            full_question = question
        
        # 使用 Vanna 实例进行聊天
        vn = get_vanna_instance()
        response = vn.chat_with_llm(
            question=full_question,
            system_prompt=system_prompt
        )
        
        if response:
            logger.info(f"聊天响应生成成功: {response[:100]}...")
            return {
                "success": True,
                "response": response.strip(),
                "message": "聊天响应生成成功"
            }
        else:
            return {
                "success": False,
                "response": _get_fallback_response(question),
                "error": "无法生成聊天响应"
            }
            
    except Exception as e:
        logger.error(f"通用聊天异常: {str(e)}")
        return {
            "success": False,
            "response": _get_fallback_response(question),
            "error": f"聊天服务异常: {str(e)}"
        }

def _get_fallback_response(question: str) -> str:
    """获取备用响应"""
    question_lower = question.lower()
    
    if any(keyword in question_lower for keyword in ["你好", "hello", "hi"]):
        return "您好！我是Citu智能数据问答平台的AI助手。我可以帮助您进行数据查询和分析，也可以回答关于平台使用的问题。有什么可以帮助您的吗？"
    
    elif any(keyword in question_lower for keyword in ["谢谢", "thank"]):
        return "不客气！如果您还有其他问题，随时可以问我。我可以帮您查询数据或解答疑问。"
    
    elif any(keyword in question_lower for keyword in ["再见", "bye"]):
        return "再见！期待下次为您服务。如果需要数据查询或其他帮助，随时欢迎回来！"
    
    elif any(keyword in question_lower for keyword in ["怎么", "如何", "怎样"]):
        return "我理解您想了解使用方法。Citu平台支持自然语言数据查询，您可以直接用中文描述您想要查询的数据，比如'查询本月销售额'或'统计各部门人数'等。有具体问题欢迎继续询问！"
    
    elif any(keyword in question_lower for keyword in ["功能", "作用", "能做"]):
        return "我主要可以帮助您：\n1. 进行数据库查询和分析\n2. 解答平台使用问题\n3. 解释数据相关概念\n4. 提供操作指导\n\n您可以用自然语言描述数据需求，我会帮您生成相应的查询。"
    
    else:
        return "抱歉，我暂时无法理解您的问题。您可以：\n1. 尝试用更具体的方式描述问题\n2. 询问平台使用方法\n3. 进行数据查询（如'查询销售数据'）\n\n我会尽力为您提供帮助！"