#!/usr/bin/env python3
"""Diagnostic script v2 - wait for page to fully load"""
import os, sys, time, json
from datetime import datetime
from pathlib import Path

sys.path.insert(0, '/mnt/e/genesis-system')
os.environ['LD_LIBRARY_PATH'] = '/mnt/e/genesis-system/.venvs/playwright-libs/'

REPORT_DIR = Path(f'/mnt/e/genesis-system/reports/ghl_diagnostic_{datetime.now().strftime("%Y%m%d_%H%M%S")}')
REPORT_DIR.mkdir(parents=True, exist_ok=True)

def run():
    from playwright.sync_api import sync_playwright
    
    report = {
        'timestamp': datetime.now().isoformat(),
        'steps': []
    }
    
    with sync_playwright() as p:
        browser = p.chromium.launch(headless=True, args=['--no-sandbox'])
        page = browser.new_page()
        
        try:
            print("Step 1: Loading GHL login page...")
            page.goto('https://app.gohighlevel.com/', timeout=30000)
            report['steps'].append('Navigated to GHL')
            
            print("Step 2: Waiting for page to load...")
            page.wait_for_load_state('load', timeout=20000)
            report['steps'].append('Page load complete')
            
            print("Step 3: Waiting for network idle...")
            try:
                page.wait_for_load_state('networkidle', timeout=10000)
                report['steps'].append('Network idle detected')
            except:
                report['steps'].append('Network idle timeout (expected for SPAs)')
            
            # Wait for any input to appear
            print("Step 4: Waiting for input elements...")
            try:
                page.wait_for_selector('input', timeout=10000)
                report['steps'].append('Input element found')
            except:
                report['steps'].append('No input element after 10s - checking alternatives')
            
            time.sleep(5)  # Give JS time to render
            
            # Check for iframes
            iframes = page.frames
            report['iframes'] = len(iframes)
            report['steps'].append(f'Found {len(iframes)} frames')
            
            # Get all inputs
            inputs = page.query_selector_all('input')
            report['input_count'] = len(inputs)
            report['steps'].append(f'Found {len(inputs)} input elements')
            
            for i, inp in enumerate(inputs):
                inp_info = {
                    'index': i,
                    'type': inp.get_attribute('type'),
                    'name': inp.get_attribute('name'),
                    'id': inp.get_attribute('id'),
                    'placeholder': inp.get_attribute('placeholder'),
                    'visible': inp.is_visible()
                }
                if 'inputs' not in report:
                    report['inputs'] = []
                report['inputs'].append(inp_info)
                print(f"  Input[{i}]: {inp_info}")
            
            # Get buttons
            buttons = page.query_selector_all('button')
            report['button_count'] = len(buttons)
            report['steps'].append(f'Found {len(buttons)} buttons')
            
            for i, btn in enumerate(buttons[:10]):
                btn_info = {
                    'index': i,
                    'text': btn.text_content().strip()[:50],
                    'type': btn.get_attribute('type'),
                    'visible': btn.is_visible()
                }
                if 'buttons' not in report:
                    report['buttons'] = []
                report['buttons'].append(btn_info)
                print(f"  Button[{i}]: {btn_info}")
            
            # Get page title and URL
            report['title'] = page.title()
            report['url'] = page.url
            report['steps'].append(f'Page title: {report["title"]}')
            
            # Get HTML body (first 5000 chars)
            html = page.content()
            report['html_size'] = len(html)
            report['html_snippet'] = html[:5000]
            
            # Take screenshots
            print("Step 5: Taking screenshots...")
            page.screenshot(path=str(REPORT_DIR / '01_initial.png'), full_page=True)
            page.screenshot(path=str(REPORT_DIR / '02_viewport.png'))
            report['steps'].append('Screenshots taken')
            
        except Exception as e:
            import traceback
            report['error'] = str(e)
            report['traceback'] = traceback.format_exc()
            print(f"ERROR: {e}")
        
        finally:
            browser.close()
    
    # Save report
    with open(REPORT_DIR / 'report.json', 'w') as f:
        json.dump(report, f, indent=2)
    
    print(f"\nDiagnostic complete: {REPORT_DIR}")
    print(f"Report summary:")
    for step in report.get('steps', []):
        print(f"  - {step}")
    if 'error' in report:
        print(f"ERROR: {report['error']}")

if __name__ == '__main__':
    run()
