"""
用户管理工具 - 查询用户信息
"""
import json
from typing import Optional
from langchain.tools import tool
from storage.database.supabase_client import get_supabase_client
import logging

logger = logging.getLogger(__name__)


@tool
def get_or_create_user(
    room_number: Optional[str] = None,
    phone: Optional[str] = None,
    name: Optional[str] = None
) -> str:
    """
    查询或创建用户。通过房间号或手机号查询用户，如果不存在则创建新用户。
    
    参数:
        room_number: 房间号（可选）
        phone: 手机号（可选）
        name: 用户姓名（可选，创建新用户时使用）
    
    返回:
        用户信息JSON字符串，包含用户ID
    """
    try:
        client = get_supabase_client()
        
        # 尝试通过房间号查询
        if room_number:
            result = client.table('users').select('*').eq('room_number', room_number).eq('is_active', True).execute()
            if result.data:
                user = result.data[0]
                logger.info(f"找到用户: {user}")
                return json.dumps({
                    "success": True,
                    "user": user,
                    "is_new": False
                }, ensure_ascii=False)
        
        # 尝试通过手机号查询
        if phone:
            result = client.table('users').select('*').eq('phone', phone).eq('is_active', True).execute()
            if result.data:
                user = result.data[0]
                logger.info(f"找到用户: {user}")
                return json.dumps({
                    "success": True,
                    "user": user,
                    "is_new": False
                }, ensure_ascii=False)
        
        # 用户不存在，创建新用户
        if room_number or phone:
            user_data = {
                'name': name or f"用户{room_number or phone}",
                'phone': phone,
                'room_number': room_number,
                'user_type': 'owner',
                'is_active': True
            }
            # 移除None值
            user_data = {k: v for k, v in user_data.items() if v is not None}
            
            result = client.table('users').insert(user_data).execute()
            if result.data:
                user = result.data[0]
                logger.info(f"创建新用户: {user}")
                return json.dumps({
                    "success": True,
                    "user": user,
                    "is_new": True,
                    "message": "已为您创建业主账户"
                }, ensure_ascii=False)
        
        return json.dumps({
            "success": False,
            "error": "请提供房间号或手机号以便查询或创建用户"
        }, ensure_ascii=False)
            
    except Exception as e:
        error_msg = f"查询用户时发生错误: {str(e)}"
        logger.error(error_msg, exc_info=True)
        return json.dumps({
            "success": False,
            "error": error_msg
        }, ensure_ascii=False)
