"""
玖辰物业知识库搜索工具
"""
import json
from langchain.tools import tool
from coze_coding_dev_sdk import KnowledgeClient, Config
from coze_coding_utils.log.write_log import request_context
from coze_coding_utils.runtime_ctx.context import new_context


@tool
def search_knowledge(query: str) -> str:
    """
    在玖辰物业知识库中搜索信息。
    
    适用场景：
    - 查询物业收费标准
    - 查询服务时间、联系方式
    - 查询小区设施信息
    - 查询报修流程、投诉渠道
    - 查询装修规定、安全管理制度
    - 查询其他物业相关问题
    
    参数：
        query: 搜索关键词或问题，例如："物业费"、"游泳池开放时间"、"报修电话"
    
    返回：
        相关知识条目的JSON字符串，包含内容和相似度分数
    """
    try:
        # 获取请求上下文
        ctx = request_context.get() or new_context(method="search_knowledge")
        
        # 初始化知识库客户端
        config = Config()
        client = KnowledgeClient(config=config, ctx=ctx)
        
        # 执行搜索（指定在玖辰物业知识库中搜索）
        response = client.search(
            query=query,
            table_names=["jiuchen_property_knowledge"],
            top_k=5,
            min_score=0.3
        )
        
        if response.code != 0:
            return json.dumps({
                "success": False,
                "error": f"搜索失败: {response.msg}"
            }, ensure_ascii=False)
        
        if not response.chunks:
            return json.dumps({
                "success": True,
                "message": "未找到相关信息",
                "results": []
            }, ensure_ascii=False)
        
        # 格式化搜索结果
        results = []
        for chunk in response.chunks:
            results.append({
                "content": chunk.content,
                "score": round(chunk.score, 4),
                "doc_id": chunk.doc_id
            })
        
        return json.dumps({
            "success": True,
            "query": query,
            "count": len(results),
            "results": results
        }, ensure_ascii=False)
        
    except Exception as e:
        return json.dumps({
            "success": False,
            "error": f"知识库搜索出错: {str(e)}"
        }, ensure_ascii=False)
