"""
Pytest configuration for E2E browser tests.
Handles Playwright setup with LD_LIBRARY_PATH workaround for WSL2.
"""
import pytest
import os
from playwright.sync_api import sync_playwright, Browser, BrowserContext, Page


# Environment setup for WSL2 Chromium
os.environ['LD_LIBRARY_PATH'] = '/mnt/e/genesis-system/.venvs/playwright/lib/python3.12/site-packages/playwright/driver/package/.local-browsers/chromium-1148/chrome-linux/'


@pytest.fixture(scope="session")
def playwright():
    """Launch Playwright session."""
    with sync_playwright() as p:
        yield p


@pytest.fixture(scope="session")
def browser(playwright):
    """Launch headless Chromium browser."""
    browser = playwright.chromium.launch(
        headless=True,
        args=[
            '--no-sandbox',
            '--disable-setuid-sandbox',
            '--disable-dev-shm-usage',
            '--disable-gpu'
        ]
    )
    yield browser
    browser.close()


@pytest.fixture(scope="function")
def context(browser):
    """Create new browser context for each test (isolation)."""
    context = browser.new_context(
        viewport={'width': 1920, 'height': 1080},
        user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
    )
    yield context
    context.close()


@pytest.fixture(scope="function")
def page(context):
    """Create new page for each test."""
    page = context.new_page()
    yield page
    page.close()


@pytest.fixture(scope="function")
def mobile_page(browser):
    """Create mobile viewport page."""
    context = browser.new_context(
        viewport={'width': 375, 'height': 667},
        user_agent='Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15',
        device_scale_factor=2,
        is_mobile=True,
        has_touch=True
    )
    page = context.new_page()
    yield page
    page.close()
    context.close()


@pytest.fixture(scope="function")
def tablet_page(browser):
    """Create tablet viewport page."""
    context = browser.new_context(
        viewport={'width': 768, 'height': 1024},
        user_agent='Mozilla/5.0 (iPad; CPU OS 15_0 like Mac OS X) AppleWebKit/605.1.15',
        device_scale_factor=2,
        is_mobile=True,
        has_touch=True
    )
    page = context.new_page()
    yield page
    page.close()
    context.close()


# Test URLs
API_BASE_URL = "http://localhost:8000"
WIDGET_BASE_URL = "http://localhost:8888"
DASHBOARD_BASE_URL = "http://localhost:8889"


@pytest.fixture
def api_url():
    """API base URL."""
    return API_BASE_URL


@pytest.fixture
def widget_url():
    """Widget base URL."""
    return WIDGET_BASE_URL


@pytest.fixture
def dashboard_url():
    """Dashboard base URL."""
    return DASHBOARD_BASE_URL


# Screenshot helper
@pytest.fixture
def screenshot_on_failure(request, page):
    """Take screenshot on test failure."""
    yield
    if request.node.rep_call.failed:
        screenshot_path = f"/mnt/e/genesis-system/tests/e2e/screenshots/{request.node.name}.png"
        os.makedirs(os.path.dirname(screenshot_path), exist_ok=True)
        page.screenshot(path=screenshot_path)
        print(f"Screenshot saved: {screenshot_path}")


def pytest_configure(config):
    """Create screenshots directory."""
    os.makedirs("/mnt/e/genesis-system/tests/e2e/screenshots", exist_ok=True)


@pytest.hookimpl(tryfirst=True, hookwrapper=True)
def pytest_runtest_makereport(item, call):
    """Store test result for screenshot fixture."""
    outcome = yield
    rep = outcome.get_result()
    setattr(item, f"rep_{rep.when}", rep)
