#!/usr/bin/env python3
"""
Abrir Google Flow no Xvfb para login manual
"""
import asyncio
from playwright.async_api import async_playwright
import json
import time

async def open_flow_browser():
    async with async_playwright() as p:
        # Lançar browser no Xvfb (display :99)
        browser = await p.chromium.launch(
            headless=False,  # Não headless para aparecer no Xvfb
            args=[
                '--no-sandbox',
                '--disable-dev-shm-usage',
                '--disable-gpu',
                '--disable-web-security',
                '--disable-features=VizDisplayCompositor'
            ]
        )
        
        context = await browser.new_context(
            viewport={'width': 1920, 'height': 1080}
        )
        page = await context.new_page()
        
        print("🚀 Abrindo Google Flow Labs no Xvfb...")
        await page.goto('https://labs.google/fx')
        await page.wait_for_load_state('networkidle')
        
        print("✅ Google Flow Labs aberto!")
        print("📱 URL:", page.url)
        print("\n" + "="*80)
        print("🎯 BROWSER ABERTO NO XVFB (DISPLAY :99)")
        print("📋 INSTRUÇÕES:")
        print("1. O browser está rodando no display virtual :99")
        print("2. Use VNC ou acesso remoto para ver a tela")
        print("3. Faça login manual: gabrielcustodiooliveira@gmail.com / mmommorpg")
        print("4. Complete o 2FA")
        print("5. Digite 'done' aqui quando terminar o login")
        print("="*80 + "\n")
        
        # Loop aguardando input do usuário
        while True:
            try:
                # Verificar se ainda estamos na página
                current_url = page.url
                print(f"📄 URL atual: {current_url}")
                
                # Aguardar 30 segundos e verificar novamente
                await asyncio.sleep(30)
                
                # Extrair cookies periodicamente
                cookies = await context.cookies()
                session_tokens = []
                csrf_tokens = []
                
                for cookie in cookies:
                    name = cookie['name'].lower()
                    if 'session' in name or 'auth' in name:
                        session_tokens.append(f"{cookie['name']}: {cookie['value'][:50]}...")
                    elif 'csrf' in name or 'xsrf' in name:
                        csrf_tokens.append(f"{cookie['name']}: {cookie['value'][:50]}...")
                
                if session_tokens:
                    print("🍪 Session cookies encontrados:")
                    for token in session_tokens:
                        print(f"  ✅ {token}")
                
                if csrf_tokens:
                    print("🛡️ CSRF cookies encontrados:")
                    for token in csrf_tokens:
                        print(f"  ✅ {token}")
                
                # Salvar cookies atualizados
                with open('flow_cookies_live.json', 'w') as f:
                    json.dump(cookies, f, indent=2)
                
                print("💾 Cookies salvos em flow_cookies_live.json")
                print("⏳ Verificando novamente em 30 segundos...")
                print("💡 Pressione Ctrl+C para sair quando login estiver completo")
                
            except KeyboardInterrupt:
                print("\n🛑 Interrompido pelo usuário")
                break
            except Exception as e:
                print(f"⚠️ Erro: {e}")
                break
        
        # Salvar cookies finais
        print("🍪 Extraindo cookies finais...")
        final_cookies = await context.cookies()
        
        with open('flow_cookies_final.json', 'w') as f:
            json.dump(final_cookies, f, indent=2)
        
        print("💾 Cookies finais salvos em flow_cookies_final.json")
        
        await browser.close()

if __name__ == "__main__":
    print("🎬 Iniciando browser Google Flow no Xvfb...")
    asyncio.run(open_flow_browser())