"""Example: Client using resources-as-tools.

This client demonstrates calling the list_resources and read_resource tools
generated by the ResourcesAsTools transform.

Run with:
    uv run python examples/resources_as_tools/client.py
"""

import asyncio
import json

from fastmcp.client import Client


async def main():
    # Connect to the server
    async with Client("examples/resources_as_tools/server.py") as client:
        # List all available tools
        print("=== Available Tools ===")
        tools = await client.list_tools()
        for tool in tools:
            print(f"  - {tool.name}: {tool.description}")
        print()

        # Use list_resources tool to see what's available
        print("=== Listing Resources ===")
        result = await client.call_tool("list_resources", {})
        resources = json.loads(result.data)
        for resource in resources:
            if "uri" in resource:
                print(f"  Static: {resource['uri']}")
            else:
                print(f"  Template: {resource['uri_template']}")
            print(f"    Name: {resource['name']}")
            print(f"    Description: {resource.get('description', 'N/A')}")
            print()

        # Read a static resource
        print("=== Reading Static Resource ===")
        result = await client.call_tool("read_resource", {"uri": "config://app"})
        print(f"config://app content:\n{result.data}")
        print()

        # Read a templated resource
        print("=== Reading Templated Resource ===")
        result = await client.call_tool("read_resource", {"uri": "user://42/profile"})
        print(f"user://42/profile content:\n{result.data}")


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