from swarms.tools.base_tool import (
    BaseTool,
    ToolValidationError,
    ToolExecutionError,
    ToolNotFoundError,
)
import json


def get_current_weather(location: str, unit: str = "celsius") -> str:
    """Get the current weather for a location.

    Args:
        location (str): The city or location to get weather for
        unit (str, optional): Temperature unit ('celsius' or 'fahrenheit'). Defaults to 'celsius'.

    Returns:
        str: A string describing the current weather at the location

    Examples:
        >>> get_current_weather("New York")
        'Weather in New York is likely sunny and 75° Celsius'
        >>> get_current_weather("London", "fahrenheit")
        'Weather in London is likely sunny and 75° Fahrenheit'
    """
    return f"Weather in {location} is likely sunny and 75° {unit.title()}"


def add_numbers(a: int, b: int) -> int:
    """Add two numbers together.

    Args:
        a (int): First number to add
        b (int): Second number to add

    Returns:
        int: The sum of a and b

    Examples:
        >>> add_numbers(2, 3)
        5
        >>> add_numbers(-1, 1)
        0
    """
    return a + b


# Example with improved error handling and logging
try:
    # Create BaseTool instance with verbose logging
    tool_manager = BaseTool(
        verbose=True,
        auto_execute_tool=False,
    )

    print(
        json.dumps(
            tool_manager.func_to_dict(get_current_weather),
            indent=4,
        )
    )

    print(
        json.dumps(
            tool_manager.multiple_functions_to_dict(
                [get_current_weather, add_numbers]
            ),
            indent=4,
        )
    )

except (
    ToolValidationError,
    ToolExecutionError,
    ToolNotFoundError,
) as e:
    print(f"Tool error: {e}")
except Exception as e:
    print(f"Unexpected error: {e}")