"""


tool decorated func [search_api] -> agent which parses the docs of the tool func
-> injected into prompt -> agent will output json containing tool usage -> agent output will be parsed -> tool executed
-> terminal response can be returned to agent for self-healing


"""

import os

from dotenv import load_dotenv

# Import the OpenAIChat model and the Agent struct
from swarms import Agent, OpenAIChat
from swarms.tools.tool import tool

# Load the environment variables
load_dotenv()


# Define a tool
@tool
def search_api(query: str, description: str):
    """Search the web for the query

    Args:
        query (str): _description_

    Returns:
        _type_: _description_
    """
    return f"Search results for {query}"


@tool
def weather_api(
    query: str,
):
    """_summary_

    Args:
        query (str): _description_
    """
    print(f"Getting the weather for {query}")


@tool
def rapid_api(query: str):
    """_summary_

    Args:
        query (str): _description_
    """
    print(f"Getting the weather for {query}")


# Get the API key from the environment
api_key = os.environ.get("OPENAI_API_KEY")

# Initialize the language model
llm = OpenAIChat(
    temperature=0.5,
    openai_api_key=api_key,
)


## Initialize the workflow
agent = Agent(
    agent_name="Research Agent",
    llm=llm,
    max_loops=1,
    dashboard=True,
    tools=[search_api, weather_api, rapid_api],
)

# Run the workflow on a task
out = agent.run("Generate a 10,000 word blog on health and wellness.")
print(out)