#!/usr/bin/env python3
"""
小红书搜索标签词接口
获取小红书平台搜索结果中的标签词
注意：此接口的call_type为browser_auto_operate，可能需要更长的响应时间
"""

import requests
import json
import os
import argparse
from datetime import datetime
from typing import Dict, Any
import sys
from pathlib import Path

# 添加项目根目录到路径并导入配置
sys.path.insert(0, str(Path(__file__).parent.parent.parent))
from lib.config import get_data_dir



class XiaohongshuSearchHashtag:
    """小红书搜索标签词API封装类"""

    BASE_URL = "http://47.84.182.56:8001"
    TOOL_NAME = "xiaohongshu_search_hashtag"
    PLATFORM = "xiaohongshu"  # 平台名称

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

        Args:
            results_dir: 结果输出目录，默认为脚本所在目录下的 results 文件夹
        """
        self.api_url = f"{self.BASE_URL}/tools/call/{self.TOOL_NAME}"

        # 设置结果输出目录
        if results_dir:
            self.results_base_dir = results_dir
        else:
            # 默认从配置读取

            self.results_base_dir = get_data_dir("search_tagwords")

    def get_hashtags(self, prompt: str, timeout: int = 60) -> Dict[str, Any]:
        """
        获取小红书搜索标签词

        注意：此接口使用browser_auto_operate方式调用，需要提供完整的prompt描述

        Args:
            prompt: 提示词prompt，包含完整的输入信息
                    例如：'搜索关键词"护肤"，获取相关标签词'
            timeout: 请求超时时间（秒），默认60秒（浏览器自动化可能需要更长时间）

        Returns:
            API响应的JSON数据

        Raises:
            requests.exceptions.RequestException: 请求失败时抛出异常
        """
        payload = {
            "prompt": prompt
        }

        try:
            response = requests.post(
                self.api_url,
                json=payload,
                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, prompt: str, result: Dict[str, Any]) -> str:
        """
        保存结果到文件
        目录结构: results/平台/关键词/hashtag_时间戳.json

        Args:
            prompt: 提示词（用于提取关键词）
            result: API返回的结果

        Returns:
            保存的文件路径
        """
        # 从prompt中提取关键词
        keyword = prompt.replace('"', '').replace("'", '').replace('搜索关键词', '').replace('，获取搜索结果中的标签词', '').strip()
        if not keyword:
            keyword = "unknown"

        # 创建目录结构: results/平台/关键词/
        result_dir = os.path.join(self.results_base_dir, self.PLATFORM, keyword)
        os.makedirs(result_dir, exist_ok=True)

        # 文件名使用时间戳，添加hashtag标识
        timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
        filename = f"hashtag_{timestamp}.json"
        filepath = os.path.join(result_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=None,
        help='结果输出目录 (默认: 从配置读取)'
    )
    parser.add_argument(
        '--keyword',
        type=str,
        required=True,
        help='搜索关键词 (必填)'
    )
    args = parser.parse_args()

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

    # 获取标签词并保存
    try:
        # 注意：此接口需要提供完整的prompt描述
        prompt = f'搜索关键词"{args.keyword}"，获取搜索结果中的标签词'
        result = client.get_hashtags(prompt)
        filepath = client.save_result(prompt, result)
        print(f"Output: {filepath}")
    except Exception as e:
        print(f"Error: {e}", file=__import__('sys').stderr)


if __name__ == "__main__":
    main()
