#!/usr/bin/env python3
import asyncio
import json
import sys
from fastmcp import Client

async def call_tool(tool_name, params=None):
    """Wywołuje narzędzie na serwerze MCP"""
    async with Client("http://localhost:8124/mcp") as client:
        try:
            result = await client.call_tool(tool_name, params or {})
            return result.content[0].text
        except Exception as e:
            return f"❌ Błąd: {e}"

async def list_tools():
    """Lista dostępnych narzędzi"""
    async with Client("http://localhost:8124/mcp") as client:
        try:
            tools = await client.list_tools()
            return [tool.name for tool in tools]
        except Exception as e:
            return f"❌ Błąd: {e}"

async def main():
    """Główna funkcja klienta"""
    if len(sys.argv) < 2:
        print("Użycie:")
        print("  python3 fastmcp_client.py list                    # lista narzędzi")
        print("  python3 fastmcp_client.py call '<json>'           # wywołanie narzędzia")
        print("")
        print("Przykłady JSON:")
        print('  {"tool": "get_current_date"}')
        print('  {"tool": "open_browser_on_tv", "params": {"url": "https://www.youtube.com"}}')
        print('  {"tool": "light_on"}')
        print('  {"tool": "woda_off"}')
        return
    
    command = sys.argv[1]
    
    if command == "list":
        tools = await list_tools()
        print(f"📋 Dostępne narzędzia: {tools}")
    
    elif command == "call":
        if len(sys.argv) < 3:
            print("❌ Brak JSON z poleceniem")
            return
        
        try:
            config = json.loads(sys.argv[2])
            tool_name = config.get("tool")
            params = config.get("params", {})
            
            if not tool_name:
                print("❌ Brak nazwy narzędzia w JSON")
                return
            
            result = await call_tool(tool_name, params)
            print(f"🎯 Wynik: {result}")
            
        except json.JSONDecodeError:
            print("❌ Nieprawidłowy format JSON")
        except Exception as e:
            print(f"❌ Błąd: {e}")
    
    else:
        print(f"❌ Nieznane polecenie: {command}")

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