"""Debug script to test a single infinite loop test case."""

import asyncio
import os

from openai import AsyncOpenAI

from suno_orpheus.eval.runner import evaluate_test_case_single_run
from suno_orpheus.eval.test_cases_infinite_loop import INFINITE_LOOP_001


async def main():
    # Check API key
    api_key = os.environ.get("ORPHEUS_TEST_OPENAI_KEY")
    if not api_key:
        print("❌ ERROR: ORPHEUS_TEST_OPENAI_KEY not set")
        print("Please set it with: export ORPHEUS_TEST_OPENAI_KEY=<your_key>")
        return

    print(f"✅ API key found: {api_key[:10]}...")
    print(f"📝 Testing: {INFINITE_LOOP_001.name}")
    print(f"📋 Context messages: {len(INFINITE_LOOP_001.context.get('messages', []))}")
    print(f"💬 User prompts: {INFINITE_LOOP_001.user_prompts}")
    print()

    # Create OpenAI client
    openai_client = AsyncOpenAI(api_key=api_key)

    # Run single test
    print("🏃 Running single test case...")
    try:
        result = await evaluate_test_case_single_run(INFINITE_LOOP_001, openai_client)

        print("\n📊 Result:")
        print(f"   Passed: {result['passed']}")
        print(f"   Duration: {result['duration']:.2f}s")

        if "error" in result:
            print(f"\n❌ Error: {result['error']}")
        else:
            response = result.get("response", {})
            print(f"   Exchanges: {response.get('exchanges', 'N/A')}")
            print(f"   Tool calls: {len(response.get('tool_calls', []))}")
            if response.get("tool_calls"):
                first_tool = response["tool_calls"][0]["function"]["name"]
                print(f"   First tool: {first_tool}")

            print("\n   Metrics:")
            for metric in result.get("metric_results", []):
                status = "✅" if metric["success"] else "❌"
                print(f"      {status} {metric['name']}: {metric['reason']}")

    except Exception as e:
        print(f"\n❌ Exception: {e}")
        import traceback

        traceback.print_exc()


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