"""
Global session state manager for authenticated sessions
"""

import time
from typing import Dict, Any, List

from ..config import authenticated_session, session


def update_authenticated_session(
    login_url: str,
    cookies: List[Dict[str, Any]], 
    session_data: Dict[str, Any],
    headers: Dict[str, str] = None
) -> None:
    """Update the global authenticated session state."""
    authenticated_session.update({
        "active": True,
        "login_url": login_url,
        "login_timestamp": time.time(),
        "cookies_count": len(cookies),
        "browser_cookies": cookies,
        "headers": headers or dict(session.headers),
        "user_agent": session.headers.get("User-Agent"),
        "last_activity": time.time(),
        "auth_tokens": {},
        "session_data": session_data
    })


def clear_authenticated_session() -> Dict[str, Any]:
    """Clear the global authenticated session state and return cleared state info."""
    before_state = {
        "active": authenticated_session.get("active", False),
        "login_url": authenticated_session.get("login_url"),
        "cookies_count": authenticated_session.get("cookies_count", 0),
        "last_activity": authenticated_session.get("last_activity")
    }
    
    authenticated_session.clear()
    authenticated_session.update({
        "active": False,
        "login_url": None,
        "login_timestamp": None,
        "cookies_count": 0,
        "browser_cookies": [],
        "headers": {},
        "user_agent": None,
        "last_activity": None,
        "auth_tokens": {},
        "session_data": {}
    })
    
    return before_state


def get_authenticated_session_info() -> Dict[str, Any]:
    """Get current authenticated session information."""
    return {
        "active": authenticated_session.get("active", False),
        "login_url": authenticated_session.get("login_url"),
        "login_timestamp": authenticated_session.get("login_timestamp"),
        "cookies_count": authenticated_session.get("cookies_count", 0),
        "last_activity": authenticated_session.get("last_activity"),
        "session_age_hours": (
            (time.time() - authenticated_session.get("login_timestamp", time.time())) / 3600
            if authenticated_session.get("login_timestamp") else 0
        ),
        "is_expired": (
            (time.time() - authenticated_session.get("last_activity", time.time())) > 3600
            if authenticated_session.get("last_activity") else True
        )
    }


def is_session_active() -> bool:
    """Check if authenticated session is active and not expired."""
    if not authenticated_session.get("active"):
        return False
    
    last_activity = authenticated_session.get("last_activity", 0)
    session_age = time.time() - last_activity
    
    # Session expires after 1 hour of inactivity
    return session_age < 3600
