# Copyright (c) Microsoft. All rights reserved.
import asyncio
import os

from agent_framework import Agent
from agent_framework.anthropic import AnthropicClient
from dotenv import load_dotenv

# Load environment variables from .env file
load_dotenv()

"""
Anthropic Chat Agent Example

This sample demonstrates using Anthropic with:
- Setting up an Anthropic-based agent with hosted tools.
- Using the `thinking` feature.
- Displaying both thinking and usage information during streaming responses.

Environment variables:
    ANTHROPIC_API_KEY    — Your Anthropic API key
    ANTHROPIC_CHAT_MODEL — The Anthropic model to use (e.g., "claude-sonnet-4-6")

"""


async def main() -> None:
    """Example of streaming response (get results as they are generated)."""
    client = AnthropicClient(
        api_key=os.getenv("ANTHROPIC_API_KEY"),
        model=os.getenv("ANTHROPIC_CHAT_MODEL"),
    )

    # Create MCP tool configuration using instance method
    mcp_tool = client.get_mcp_tool(
        name="Microsoft_Learn_MCP",
        url="https://learn.microsoft.com/api/mcp",
    )

    # Create web search tool configuration using instance method
    web_search_tool = client.get_web_search_tool()

    agent = Agent(
        client=client,
        name="DocsAgent",
        instructions="You are a helpful agent for both Microsoft docs questions and general questions.",
        tools=[mcp_tool, web_search_tool],
        default_options={
            # anthropic needs a value for the max_tokens parameter
            # we set it to 1024, but you can override like this:
            "max_tokens": 20000,
            "thinking": {"type": "enabled", "budget_tokens": 10000},
        },
    )

    query = "Can you compare Python decorators with C# attributes?"
    print(f"User: {query}")
    print("Agent: ", end="", flush=True)
    async for chunk in agent.run(query, stream=True):
        for content in chunk.contents:
            if content.type == "text_reasoning" and content.text:
                print(f"\033[32m{content.text}\033[0m", end="", flush=True)
            if content.type == "usage":
                print(f"\n\033[34m[Usage so far: {content.usage_details}]\033[0m\n", end="", flush=True)
        if chunk.text:
            print(chunk.text, end="", flush=True)

    print("\n")


if __name__ == "__main__":
    asyncio.run(main())
