"""
Work Assistant Agent 기본 사용 예제
"""

import asyncio
import os
import sys

# 상위 디렉토리 추가 (개발 시)
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'src'))

from work_assistant_agent import WorkAssistantAgent, AgentConfig, AgentContext
from work_assistant_agent.agent import create_agent


async def example_basic():
    """기본 사용 예제"""
    print("=" * 60)
    print("기본 사용 예제")
    print("=" * 60)
    
    # 에이전트 설정
    config = AgentConfig(
        model_provider="openai",
        model_name="gpt-4o",
        temperature=0,
        mcp_config_path="mcp_config.json"  # MCP 설정 파일
    )
    
    # 에이전트 생성
    agent = WorkAssistantAgent(config)
    
    try:
        # 초기화 (MCP 서버 연결 및 도구 로드)
        await agent.initialize()
        print(f"로드된 도구 수: {len(agent.tools)}")
        
        # 컨텍스트 설정
        context = AgentContext(
            tenant_id="uengine",
            user_uid="550e8400-e29b-41d4-a716-446655440000",
            user_email="user@example.com",
            user_name="홍길동"
        )
        
        # 비스트리밍 응답
        print("\n[질문] 어떤 프로세스가 있어?")
        response = await agent.run("어떤 프로세스가 있어?", context, stream=False)
        print(f"[응답] {response}")
        
    finally:
        # 정리
        await agent.cleanup()


async def example_streaming():
    """스트리밍 사용 예제"""
    print("\n" + "=" * 60)
    print("스트리밍 사용 예제")
    print("=" * 60)
    
    # 편의 함수로 에이전트 생성
    agent = await create_agent(
        model_provider="openai",
        model_name="gpt-4o",
        mcp_config_path="mcp_config.json"
    )
    
    try:
        context = AgentContext(
            tenant_id="uengine",
            user_uid="550e8400-e29b-41d4-a716-446655440000",
            user_email="user@example.com"
        )
        
        # 스트리밍 응답
        print("\n[질문] 조직도 보여줘")
        stream = await agent.run("조직도 보여줘", context, stream=True)
        
        print("[응답] ", end="", flush=True)
        async for chunk in stream:
            import json
            data = json.loads(chunk)
            if data["type"] == "token":
                print(data["content"], end="", flush=True)
            elif data["type"] == "tool_start":
                print(f"\n  🔧 도구 호출: {data['tool']}", flush=True)
            elif data["type"] == "tool_end":
                print(f"  ✅ 도구 완료", flush=True)
        print()
        
    finally:
        await agent.cleanup()


async def example_runtime_mcp():
    """런타임 MCP 서버 추가 예제"""
    print("\n" + "=" * 60)
    print("런타임 MCP 서버 추가 예제")
    print("=" * 60)
    
    config = AgentConfig(
        model_provider="openai",
        model_name="gpt-4o"
    )
    
    agent = WorkAssistantAgent(config)
    
    try:
        await agent.initialize()
        print(f"초기 도구 수: {len(agent.tools)}")
        
        # 런타임에 MCP 서버 추가
        await agent.add_mcp_server(
            name="work-assistant",
            command="uvx",
            args=["work-assistant-mcp"],
            env={
                "SUPABASE_URL": os.getenv("SUPABASE_URL", ""),
                "SUPABASE_SERVICE_KEY": os.getenv("SUPABASE_SERVICE_KEY", ""),
                "API_BASE_URL": os.getenv("API_BASE_URL", "")
            }
        )
        print(f"MCP 추가 후 도구 수: {len(agent.tools)}")
        
        # 도구 목록 출력
        print("\n사용 가능한 도구:")
        for tool in agent.tools:
            print(f"  - {tool.name}: {tool.description[:50]}...")
        
    finally:
        await agent.cleanup()


async def example_conversation():
    """대화 유지 예제"""
    print("\n" + "=" * 60)
    print("대화 유지 예제")
    print("=" * 60)
    
    agent = await create_agent(
        model_provider="openai",
        model_name="gpt-4o",
        mcp_config_path="mcp_config.json"
    )
    
    try:
        # 동일한 컨텍스트로 여러 대화
        context = AgentContext(
            tenant_id="uengine",
            user_uid="550e8400-e29b-41d4-a716-446655440000",
            user_email="user@example.com",
            user_name="홍길동"
        )
        
        questions = [
            "프로세스 목록 보여줘",
            "그 중에서 휴가신청 프로세스 상세 정보 알려줘",
            "방금 그 프로세스로 12월 26일 휴가 1일 신청해줘"
        ]
        
        for q in questions:
            print(f"\n[질문] {q}")
            response = await agent.run(q, context, stream=False)
            print(f"[응답] {response[:200]}...")
            print(f"  (대화 기록: {len(context.conversation_history)}개)")
        
    finally:
        await agent.cleanup()


async def main():
    """메인 함수"""
    from dotenv import load_dotenv
    load_dotenv()
    
    # 기본 예제
    await example_basic()
    
    # 스트리밍 예제
    # await example_streaming()
    
    # 런타임 MCP 추가 예제
    # await example_runtime_mcp()
    
    # 대화 유지 예제
    # await example_conversation()


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

