"""Test configuration for pytest."""

import pytest
import sys
from pathlib import Path
from web_sentinel.localization import set_language

# Add project root to Python path
project_root = Path(__file__).parent.parent
sys.path.insert(0, str(project_root))


@pytest.fixture(autouse=True)
def setup_test_environment():
    """Configure l'environnement de test - langue anglaise."""
    set_language("en")
    yield
    # Restore French as default after tests
    set_language("fr")


@pytest.fixture
def sample_scan_request():
    """Provide a sample ScanRequest for testing."""
    from web_sentinel.model import ScanRequest
    return ScanRequest(
        domain="example.com",
        timeout=5.0,
        allow_invasive=False
    )


@pytest.fixture
def sample_finding():
    """Provide a sample Finding for testing."""
    from web_sentinel.model import Finding
    return Finding(
        check="tls",
        title="Test SSL Certificate Issue",
        severity="medium",
        description="This is a test finding for unit testing purposes.",
        remediation="Fix the SSL configuration as recommended.",
        evidence="Test evidence data",
        impact="Medium impact on security"
    )


@pytest.fixture
def mock_scan_results():
    """Provide mock scan results for testing."""
    from web_sentinel.model import ScanRequest, ScanResult, Finding
    
    request = ScanRequest(domain="test.example.com")
    findings = [
        Finding(
            check="tls",
            title="SSL Certificate Expired", 
            severity="high",
            description="The SSL certificate has expired.",
            remediation="Renew the SSL certificate immediately."
        ),
        Finding(
            check="headers",
            title="Missing Security Header",
            severity="medium", 
            description="Security header is missing.",
            remediation="Add the security header."
        )
    ]
    
    return [ScanResult(request=request, findings=findings)]


# Skip GUI tests if tkinter is not available
def pytest_configure(config):
    """Configure pytest to handle optional dependencies."""
    config.addinivalue_line(
        "markers", "gui: mark test as requiring GUI (tkinter)"
    )
    config.addinivalue_line(
        "markers", "integration: mark test as integration test"  
    )
    config.addinivalue_line(
        "markers", "network: mark test as requiring network access"
    )


def pytest_collection_modifyitems(config, items):
    """Automatically skip tests that require unavailable dependencies."""
    try:
        import tkinter
        skip_gui = False
    except ImportError:
        skip_gui = True
    
    for item in items:
        # Skip GUI tests if tkinter not available
        if "gui" in item.keywords and skip_gui:
            item.add_marker(pytest.mark.skip(reason="tkinter not available"))
            
        # Skip static analysis tests if BeautifulSoup not available  
        if "static_analysis" in item.keywords:
            try:
                import bs4
            except ImportError:
                item.add_marker(pytest.mark.skip(reason="BeautifulSoup4 not available"))