import sys
import time
import base64
from pathlib import Path

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

def extract_blob():
    sync_worker_profile()
    target_video = Path("04_Assets/videos/ep01_scene01_shot01_10s.mp4").resolve()
    target_video.parent.mkdir(parents=True, exist_ok=True)
    
    with InvisiblePlaywright(profile_dir=DEFAULT_PROFILE, headless=True) as ctx:
        page = ctx.pages[0] if ctx.pages else ctx.new_page()
        page.goto("https://muse.ai", wait_until="domcontentloaded", timeout=30000)
        time.sleep(5)
        
        # Wait for video element
        v = page.locator("video").last
        if v.count() > 0:
            blob_url = v.get_attribute("src") or v.evaluate("el => el.currentSrc")
            print("Found blob URL:", blob_url)
            
            b64_data = page.evaluate("""async (url) => {
                const res = await fetch(url);
                const blob = await res.blob();
                return new Promise((resolve, reject) => {
                    const reader = new FileReader();
                    reader.onloadend = () => resolve(reader.result.split(',')[1]);
                    reader.onerror = reject;
                    reader.readAsDataURL(blob);
                });
            }""", blob_url)
            
            if b64_data:
                data = base64.b64decode(b64_data)
                target_video.write_bytes(data)
                print(f"🎉 SUCCESS! Extracted {len(data)} bytes to {target_video.name}")
            else:
                print("Failed to get b64 data.")
        else:
            print("No video element found after 5s.")

if __name__ == "__main__":
    extract_blob()
