#!/usr/bin/env python3
"""
Test agent dispatch by creating a room and dispatching an agent
"""

import asyncio
import os
from dotenv import load_dotenv
from livekit import api
from livekit.protocol.agent_dispatch import CreateAgentDispatchRequest

# Load environment variables
load_dotenv('/var/www/html/livekit_frontend/BackEnd/agent-starter-python/.env.local')

LIVEKIT_URL = os.getenv('LIVEKIT_URL')
API_KEY = os.getenv('LIVEKIT_API_KEY')
API_SECRET = os.getenv('LIVEKIT_API_SECRET')

async def test_agent_dispatch():
    print("🔍 Testing Agent Dispatch\n")
    
    # Create API client
    lk_api = api.LiveKitAPI(
        LIVEKIT_URL,
        API_KEY,
        API_SECRET,
    )
    
    try:
        room_name = f"test_room_{int(asyncio.get_event_loop().time())}"
        agent_name = "default"
        
        print(f"Step 1: Creating dispatch for agent '{agent_name}' to room '{room_name}'...")
        
        # Create agent dispatch
        dispatch = await lk_api.agent_dispatch.create_dispatch(
            CreateAgentDispatchRequest(
                room=room_name,
                agent_name=agent_name,
                metadata='{"test": "dispatch"}'
            )
        )
        
        print(f"✓ Dispatch created!")
        print(f"  - Dispatch ID: {dispatch.id}")
        print(f"  - Agent Name: {dispatch.agent_name}")
        print(f"  - Room: {dispatch.room}")
        print()
        
        print("Step 2: Waiting for agent to join (check backend logs)...")
        await asyncio.sleep(5)
        
        # List rooms
        from livekit.protocol.room import ListRoomsRequest
        rooms = await lk_api.room.list_rooms(ListRoomsRequest())
        print(f"\nActive rooms: {len(rooms.rooms)}")
        for room in rooms.rooms:
            print(f"  - {room.name} ({room.num_participants} participants)")
            
            # List participants
            from livekit.protocol.room import ListParticipantsRequest
            participants = await lk_api.room.list_participants(ListParticipantsRequest(room=room.name))
            for p in participants.participants:
                print(f"    - {p.identity} (kind: {p.kind})")
        
        print("\n✓ Check backend logs for 'Job received' message")
        
    except Exception as e:
        print(f"✗ Error: {e}")
        import traceback
        traceback.print_exc()
    finally:
        await lk_api.aclose()

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