from __future__ import annotations

import argparse
import sys

from app.config import get_settings
from app.schemas import QueryRequest
from app.service import AgenticRAGService


def main() -> None:
    # Windows 控制台可能使用 GBK；网页证据中的 € 等字符不能直接编码。
    # 保留当前控制台编码，只将不支持的字符转义，避免输出阶段中断业务流程。
    if hasattr(sys.stdout, "reconfigure"):
        sys.stdout.reconfigure(errors="backslashreplace")

    parser = argparse.ArgumentParser(description="Agentic RAG 命令行入口")
    parser.add_argument("query", help="用户问题")
    parser.add_argument("--debug", action="store_true", help="输出完整执行轨迹")
    args = parser.parse_args()

    response = AgenticRAGService(get_settings()).invoke(
        QueryRequest(query=args.query, debug=args.debug)
    )
    if args.debug:
        print("=== 实际执行的工具查询 ===")
        for item in response.executed_queries:
            print(
                f"- {item['tool']}: query={item['query']!r}, "
                f"arguments={item['arguments']}, status={item['status']}"
            )
        print("=== 完整响应 ===")
    print(response.model_dump_json(indent=2))


if __name__ == "__main__":
    main()
