"""
Test single page HTML fetch to verify cookie optimization works.
"""
import asyncio
import sys
import os
import django
import time

sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'NetworkMonitoring.settings')
django.setup()

from extractly.models import NetworkMonitoredPage
from html_agregator.html_fetcher import fetch_and_save_html_for_pages
from playwright.async_api import async_playwright


async def test_single_page():
    """Test fetching a single Morizon page."""
    print("="*70)
    print("TESTING SINGLE PAGE HTML FETCH")
    print("="*70)
    
    # Get one Morizon page
    page = NetworkMonitoredPage.objects.filter(
        source__name='Morizon',
        is_fetched=False
    ).first()
    
    if not page:
        print("ERROR: No unfetched Morizon pages found!")
        return
    
    print(f"\nPage ID: {page.id}")
    print(f"URL: {page.url}")
    print(f"Has cookies config: {'cookies' in page.meta if page.meta else False}")
    
    if page.meta and 'cookies' in page.meta:
        print(f"Cookie selector: {page.meta['cookies'].get('accept_selector', 'MISSING')[:50]}...")
        print(f"Cookie timeout: {page.meta['cookies'].get('timeout', 'MISSING')}")
    
    print("\nStarting HTML fetch...")
    print("="*70)
    
    start_time = time.time()
    
    async with async_playwright() as p:
        browser = await p.chromium.launch(
            headless=True,
            args=[
                "--disable-blink-features=AutomationControlled",
                "--no-sandbox",
                "--disable-dev-shm-usage",
            ],
        )
        context = await browser.new_context(
            user_agent=(
                "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
                "(KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36"
            ),
            locale="pl-PL",
            timezone_id="Europe/Warsaw",
            viewport={"width": 1366, "height": 768},
            extra_http_headers={
                "Accept-Language": "pl-PL,pl;q=0.9,en;q=0.8",
                "Upgrade-Insecure-Requests": "1",
            },
        )
        
        await context.add_init_script("""
        Object.defineProperty(Navigator.prototype, 'webdriver', { get: () => undefined });
        window.chrome = window.chrome || { runtime: {} };
        Object.defineProperty(navigator, 'languages', { get: () => ['pl-PL','pl'] });
        Object.defineProperty(navigator, 'plugins',  { get: () => [1,2,3,4,5] });
        """)

        pw_page = await context.new_page()
        await fetch_and_save_html_for_pages(pw_page, pages=[page])
        await browser.close()
    
    duration = time.time() - start_time
    
    print("="*70)
    print(f"✅ COMPLETED in {duration:.1f} seconds")
    print("="*70)
    
    # Verify
    page.refresh_from_db()
    print(f"\nPage is_fetched: {page.is_fetched}")
    print(f"HTML length: {len(page.html) if page.html else 0}")
    print(f"Sliced HTML length: {len(page.sliced_html) if page.sliced_html else 0}")
    
    if duration < 30:
        print("\n🎉 SUCCESS! Cookie handling is FAST!")
    elif duration < 60:
        print("\n⚠️  Acceptable but could be faster")
    else:
        print("\n❌ STILL TOO SLOW - cookie handling not optimized!")


if __name__ == '__main__':
    asyncio.run(test_single_page())
