import sys, time
from pathlib import Path
sys.path.append(str(Path("05_Production_Pipeline").resolve()))
from invisible_playwright import InvisiblePlaywright
from muse_invpw_driver import DEFAULT_PROFILE

def monitor_vm_wake():
    with InvisiblePlaywright(profile_dir=DEFAULT_PROFILE, headless=True) as ctx:
        page = ctx.pages[0] if ctx.pages else ctx.new_page()
        
        page.on("response", lambda r: print(f"[RESP {r.status}] {r.url}") if "hatch" in r.url else None)
        
        print("Opening https://muse.ai ...")
        page.goto("https://muse.ai", wait_until="domcontentloaded", timeout=30000)
        time.sleep(3)
        
        # Monitor for 60 seconds
        print("Monitoring wake status for 60 seconds...")
        for i in range(12):
            time.sleep(5)
            # Check VM status via fetch in page
            state = page.evaluate("""async () => {
                try {
                    const r = await fetch('/api/hatch/vm/wake', {
                        method: 'POST',
                        headers: {'content-type': 'application/json'},
                        body: JSON.stringify({})
                    });
                    return await r.json();
                } catch(e) {
                    return { error: e.toString() };
                }
            }""")
            print(f"[{ (i+1)*5 }s] VM State:", state)
            
            # Also check page text for 'Đang kết nối'
            content = page.content()
            has_connecting = "Đang kết nối" in content
            print(f"       Page has 'Đang kết nối': {has_connecting}")
            if not has_connecting:
                print("🎉 Connected successfully!")
                break
                
        page.screenshot(path="04_Assets/vm_wake_result.png")

if __name__ == '__main__':
    monitor_vm_wake()
