#!/usr/bin/env python3
"""
获取可用工具列表接口
从API获取所有可用的工具列表
"""

import requests
import json
import os
import argparse
from datetime import datetime
from typing import Dict, Any


class ToolsListFetcher:
    """工具列表获取API封装类"""

    BASE_URL = "http://47.84.182.56:8001"
    API_ENDPOINT = "/tools"

    def __init__(self, results_dir: str = None):
        """
        初始化API客户端

        Args:
            results_dir: 结果输出目录，默认为项目根目录下的 data/tools_list 文件夹
        """
        self.api_url = f"{self.BASE_URL}{self.API_ENDPOINT}"

        # 设置结果输出目录
        if results_dir:
            self.results_base_dir = results_dir
        else:
            # 默认使用项目根目录的 data/tools_list 文件夹
            script_dir = os.path.dirname(os.path.abspath(__file__))
            project_root = os.path.dirname(script_dir)
            self.results_base_dir = os.path.join(project_root, "data", "tools_list")

    def get_tools_list(self, timeout: int = 30) -> Dict[str, Any]:
        """
        获取工具列表

        Args:
            timeout: 请求超时时间（秒），默认30秒

        Returns:
            API响应的JSON数据

        Raises:
            requests.exceptions.RequestException: 请求失败时抛出异常
        """
        try:
            response = requests.get(
                self.api_url,
                timeout=timeout,
                headers={"Content-Type": "application/json"}
            )
            response.raise_for_status()
            return response.json()
        except requests.exceptions.RequestException as e:
            print(f"请求失败: {e}")
            raise

    def save_result(self, result: Dict[str, Any]) -> str:
        """
        保存结果到文件
        目录结构: results/tools_list_时间戳.json

        Args:
            result: API返回的结果

        Returns:
            保存的文件路径
        """
        # 创建目录结构
        os.makedirs(self.results_base_dir, exist_ok=True)

        # 文件名使用时间戳
        timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
        filename = f"tools_list_{timestamp}.json"
        filepath = os.path.join(self.results_base_dir, filename)

        # 保存结果
        with open(filepath, 'w', encoding='utf-8') as f:
            json.dump(result, f, ensure_ascii=False, indent=2)

        return filepath


def main():
    """示例使用"""
    # 解析命令行参数
    parser = argparse.ArgumentParser(description='获取可用工具列表接口')
    parser.add_argument(
        '--results-dir',
        type=str,
        default='data/tools_list',
        help='结果输出目录 (默认: data/tools_list)'
    )
    args = parser.parse_args()

    # 创建API客户端实例
    client = ToolsListFetcher(results_dir=args.results_dir)

    # 获取工具列表并保存
    try:
        result = client.get_tools_list()
        filepath = client.save_result(result)
        print(f"Output: {filepath}")
    except Exception as e:
        print(f"Error: {e}", file=__import__('sys').stderr)


if __name__ == "__main__":
    main()
