"""
任务管理工具 - 创建、查询和管理物业服务任务
"""
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 create_property_task(
    user_id: int,
    title: str,
    description: Optional[str] = None,
    category_name: Optional[str] = None,
    location: Optional[str] = None,
    contact_phone: Optional[str] = None,
    priority: str = "normal",
    original_input: Optional[str] = None
) -> str:
    """
    创建物业服务任务工单。
    
    参数:
        user_id: 发起用户ID
        title: 任务标题（简短描述，如"取快递"、"挪车"）
        description: 详细描述（可选）
        category_name: 任务类别名称，如"快递代取"、"车辆挪移"、"设施报修"等（可选）
        location: 服务地点（可选）
        contact_phone: 联系电话（可选）
        priority: 优先级 - urgent(紧急)/high(高)/normal(普通)/low(低)，默认normal
        original_input: 用户原始语音输入（可选，用于追溯）
    
    返回:
        包含任务ID和确认信息的JSON字符串
    """
    try:
        client = get_supabase_client()
        
        # 查找任务类别ID
        category_id = None
        if category_name:
            category_result = client.table('task_categories').select('id').eq('name', category_name).eq('is_active', True).execute()
            if category_result.data:
                category_id = category_result.data[0]['id']  # type: ignore
        
        # 构建任务数据
        task_data = {
            'user_id': user_id,
            'title': title,
            'description': description,
            'category_id': category_id,
            'location': location,
            'contact_phone': contact_phone,
            'priority': priority,
            'status': 'pending',
            'original_input': original_input
        }
        
        # 移除None值
        task_data = {k: v for k, v in task_data.items() if v is not None}
        
        # 插入任务
        result = client.table('tasks').insert(task_data).execute()
        
        if result.data:
            task = result.data[0]  # type: ignore
            logger.info(f"任务创建成功: ID={task['id']}, 标题={title}")  # type: ignore
            
            return json.dumps({
                "success": True,
                "task_id": task['id'],  # type: ignore
                "title": task['title'],  # type: ignore
                "status": task['status'],  # type: ignore
                "priority": task['priority'],  # type: ignore
                "message": f"任务已成功创建！工单号：{task['id']}，物业人员将尽快处理您的请求。"  # type: ignore
            }, ensure_ascii=False)
        else:
            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)


@tool
def query_user_tasks(
    user_id: int,
    status: Optional[str] = None,
    limit: int = 10
) -> str:
    """
    查询用户的任务列表。
    
    参数:
        user_id: 用户ID
        status: 筛选状态 - pending(待处理)/in_progress(处理中)/completed(已完成)/cancelled(已取消)，不传则查询所有
        limit: 返回数量限制，默认10条
    
    返回:
        任务列表JSON字符串
    """
    try:
        client = get_supabase_client()
        
        # 构建查询
        query = client.table('tasks').select('*, task_categories(name, icon)').eq('user_id', user_id)
        
        if status:
            query = query.eq('status', status)
        
        # 执行查询
        result = query.order('created_at', desc=True).limit(limit).execute()
        
        if result.data:
            return json.dumps({
                "success": True,
                "count": len(result.data),
                "tasks": result.data
            }, ensure_ascii=False)
        else:
            return json.dumps({
                "success": True,
                "count": 0,
                "tasks": [],
                "message": "暂无任务记录"
            }, 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)


@tool
def get_task_detail(
    task_id: int
) -> str:
    """
    查询任务详细信息。
    
    参数:
        task_id: 任务ID
    
    返回:
        任务详情JSON字符串
    """
    try:
        client = get_supabase_client()
        
        result = client.table('tasks').select('*, task_categories(name, icon), users(name, phone, room_number)').eq('id', task_id).execute()
        
        if result.data:
            return json.dumps({
                "success": True,
                "task": result.data[0]
            }, ensure_ascii=False)
        else:
            return json.dumps({
                "success": False,
                "error": f"未找到任务ID: {task_id}"
            }, 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)
