from braket.aws import AwsDevice
import time
import datetime
import json

device = AwsDevice('arn:aws:braket:us-east-1::device/qpu/ionq/Forte-1')

print("🔍 Enhanced IonQ Forte-1 Monitoring")
print("=" * 50)
offline_start = datetime.datetime.now()
check_count = 0

# Try to get device properties once
try:
    props = device.properties
    print(f"📋 Device: {props.device.deviceName}")
    print(f"🏢 Provider: {props.provider.providerName}")
    print(f"🎯 Type: {props.device.deviceType}")
    print("=" * 50)
except Exception as e:
    print(f"⚠️  Could not get device properties: {e}")
    print("=" * 50)

while True:
    check_count += 1
    try:
        status = device.status
        now = datetime.datetime.now()
        timestamp = now.strftime("%H:%M:%S")
        offline_duration = str(now - offline_start).split('.')[0]  # Remove microseconds
        
        if status == "ONLINE":
            print(f"✅ [{timestamp}] 🎉 ONLINE! (was offline for {offline_duration})")
            try:
                queue_info = device.queue_depth()
                if hasattr(queue_info, 'quantum_tasks'):
                    normal_queue = queue_info.quantum_tasks.get('Normal', '0')
                    priority_queue = queue_info.quantum_tasks.get('Priority', '0')
                    jobs_queue = getattr(queue_info, 'jobs', '0')
                    
                    print(f"📊 Queue Status:")
                    print(f"   Normal Tasks: {normal_queue}")
                    print(f"   Priority Tasks: {priority_queue}")
                    print(f"   Jobs: {jobs_queue}")
                    print(f"🚀 READY TO RUN EXPERIMENT!")
                    print(f"💡 Run: python3 control_flip_experiment.py")
                else:
                    print(f"🟡 ONLINE - Queue info not available yet")
                break
            except Exception as qe:
                print(f"🟡 ONLINE - Queue check failed: {qe}")
                print(f"🚀 Try running experiment anyway!")
                break
        else:
            print(f"🔧 [{timestamp}] {status} - Offline: {offline_duration} (check #{check_count})")
            
    except Exception as e:
        print(f"❌ [{timestamp}] Error checking status: {e}")
    
    # Show progress every 10 checks
    if check_count % 10 == 0:
        print(f"📈 Status: Completed {check_count} checks, offline for {offline_duration}")
    
    time.sleep(120)  # Check every 2 minutes

print(f"\n🎯 Monitoring complete after {check_count} checks")
