"""
数据分析入口：根据用户问题自动路由到 SQL Agent 或可视化 Agent。
"""

from config import llm
from agents import sql_agent, visualization_agent


def classify_intent(user_query: str) -> str:
    """用 LLM 判断用户意图：query / visualize / both。"""
    prompt = f"""判断以下用户问题属于哪种类型：
    - "query"：需要查询数据库获取数据
    - "visualize"：需要画图或做统计分析
    - "both"：需要先查数据，再画图分析

    用户问题：{user_query}

    只回复一个词：query / visualize / both"""

    return llm.invoke(prompt).content.strip().lower()


def run_data_analysis(user_query: str) -> str:
    """统一入口：自动判断意图并路由到对应 Agent。"""
    intent = classify_intent(user_query)

    if intent == "query":
        result = sql_agent.invoke({"messages": [{"role": "user", "content": user_query}]})
        return result["messages"][-1].content

    elif intent == "visualize":
        result = visualization_agent.invoke({"messages": [{"role": "user", "content": user_query}]})
        return result["messages"][-1].content

    else:  # both
        data_result = sql_agent.invoke({"messages": [{"role": "user", "content": user_query}]})
        data_content = data_result["messages"][-1].content
        viz_input = f"基于以下数据进行可视化分析：\n{data_content}\n\n原始问题：{user_query}"
        viz_result = visualization_agent.invoke({"messages": [{"role": "user", "content": viz_input}]})
        return viz_result["messages"][-1].content


if __name__ == "__main__":
    user_query = """
    列出所有2023年入职的员工，并列出他们的所属部门、姓名和薪资，按薪资从高到低排序？并画柱状图展示
    """
    result = run_data_analysis(user_query)
    print(result)
