import time
import sys
import os

# Ensure project root is in path
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "..")))
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "src")))

from api_hook_client import ApiHookClient

def test_idle_performance_requirements(live_gui) -> None:
 """
 
  
      Requirement: GUI must maintain stable performance on idle.
 """
 # Warmup to ensure GUI is ready
 time.sleep(5.0)
 client = ApiHookClient()
 # Wait for app to stabilize and render some frames
 time.sleep(2.0)
 # Get multiple samples to be sure
 samples = []
 for _ in range(5):
  perf_data = client.get_performance()
  samples.append(perf_data)
  time.sleep(0.5)
  # Check for valid metrics
 valid_ft_count = 0
 total_ft = 0.0
 for sample in samples:
  performance = sample.get('performance', {})
  frame_time = performance.get('last_frame_time_ms', 0.0)
  total_ft += frame_time
  # Only assert if we have a real frame time (rendering active)
  if frame_time > 0:
   valid_ft_count += 1
   assert frame_time < 33.3, f"Frame time {frame_time}ms exceeds 30fps threshold"
 
 if valid_ft_count == 0 or total_ft == 0:
  print("[Warning] Frame time is 0.0. This is expected in headless CI/CD environments.")
 print(f"[Test] Valid frame time samples: {valid_ft_count}/5")
 # In some CI environments without a real display, frame time might remain 0
 # but we've verified the hook is returning the dictionary.