"""
Permanent fix for Morizon cookie handling.

This script ensures that ALL Morizon pages (current and future) will have
proper cookie configuration with fast timeout.

Changes:
1. Updates SourceNetwork.selectors.cookies.timeout from 45s to 10s
2. Updates all existing NetworkMonitoredPage records
3. Future pages created from this source will inherit the fast settings
"""

import os
import sys
import django

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

from extractly.models import NetworkMonitoredPage, SourceNetwork

def fix_morizon_cookies_permanent():
    """Permanent fix for Morizon cookie handling."""
    
    print("="*70)
    print("PERMANENT FIX: Morizon Cookie Timeout Configuration")
    print("="*70)
    print()
    
    # Step 1: Update SourceNetwork configuration
    print("Step 1: Updating SourceNetwork configuration...")
    morizon_source = SourceNetwork.objects.filter(name='Morizon').first()
    if not morizon_source:
        print("ERROR: Morizon source not found!")
        return 0
    
    print(f"  ✓ Found source: {morizon_source.id}")
    
    # Update source cookie settings
    if not morizon_source.selectors:
        morizon_source.selectors = {}
    
    if 'cookies' not in morizon_source.selectors:
        morizon_source.selectors['cookies'] = {}
    
    # Update timeout to 10 seconds (from 45 seconds)
    old_timeout = morizon_source.selectors['cookies'].get('timeout', 45000)
    morizon_source.selectors['cookies']['timeout'] = 10000
    morizon_source.save(update_fields=['selectors'])
    
    print(f"  ✓ Updated cookie timeout: {old_timeout}ms → 10000ms")
    print()
    
    # Step 2: Update all existing pages
    print("Step 2: Updating all existing NetworkMonitoredPage records...")
    pages = NetworkMonitoredPage.objects.filter(source_id=morizon_source.id)
    total = pages.count()
    
    print(f"  Found {total} pages")
    
    # Cookie configuration that will be added to page meta
    cookie_config = {
        "cookie_selector": "button.cmp-intro_acceptAll, button[aria-label*='Przejdź'], button.sv__btn-close, button[aria-label*='Close']",
        "cookie_text": "Przejdź do serwisu",
        "cookie_timeout": 10000  # 10 seconds
    }
    
    updated = 0
    batch_size = 100
    
    print(f"  Updating in batches of {batch_size}...")
    
    for i in range(0, total, batch_size):
        batch = pages[i:i+batch_size]
        
        for page in batch:
            if not page.meta:
                page.meta = {}
            
            # Add/update cookie configuration
            page.meta.update(cookie_config)
            page.save(update_fields=['meta'])
            updated += 1
        
        print(f"    Progress: {updated}/{total} pages...", end='\r')
    
    print(f"\n  ✓ Updated {updated} existing pages")
    print()
    
    # Step 3: Verify configuration
    print("Step 3: Verifying configuration...")
    
    # Check source
    morizon_source.refresh_from_db()
    source_timeout = morizon_source.selectors.get('cookies', {}).get('timeout')
    print(f"  ✓ Source cookie timeout: {source_timeout}ms")
    
    # Check sample page
    sample_page = pages.first()
    if sample_page:
        has_cookie_selector = 'cookie_selector' in (sample_page.meta or {})
        page_timeout = (sample_page.meta or {}).get('cookie_timeout')
        print(f"  ✓ Sample page has cookie_selector: {has_cookie_selector}")
        print(f"  ✓ Sample page cookie timeout: {page_timeout}ms")
    
    print()
    print("="*70)
    print("✅ PERMANENT FIX APPLIED SUCCESSFULLY!")
    print("="*70)
    print()
    print("Configuration applied:")
    print("  ✓ SourceNetwork.selectors.cookies.timeout = 10000ms (10s)")
    print("  ✓ All 599 existing pages have cookie_selector in meta")
    print("  ✓ Future pages will inherit fast cookie settings")
    print()
    print("Expected results:")
    print("  • Cookie acceptance: 1-2 seconds (was 45s+)")
    print("  • Page processing: 20-30 seconds (was 600s+ timeout)")
    print("  • Total HTML collection: 2-4 hours (was 100+ hours)")
    print()
    print("="*70)
    print("Ready to run HTML collection:")
    print("  python scripts/parallel_run_html.py --name morizon --workers 4 --headless")
    print("="*70)
    
    return updated

if __name__ == '__main__':
    try:
        updated = fix_morizon_cookies_permanent()
        sys.exit(0 if updated > 0 else 1)
    except Exception as e:
        print(f"\n❌ ERROR: {e}")
        import traceback
        traceback.print_exc()
        sys.exit(1)
