"""
Genesis V2 Browser Module
==========================
Enhanced browser automation via the Genesis Superior Browser (GSB) stack.
"""

import logging
from typing import Any, Optional, Dict
from genesis_v2.core.browser_gsb import get_gsb

logger = logging.getLogger("genesis_v2.core.browser")

class BrowserResult:
    def __init__(self, success: bool, data: Any = None, error: str = None):
        self.success = success
        self.data = data
        self.error = error

class BrowserController:
    """Manages browser automation by delegating to the GSB Stack."""

    def __init__(self):
        self.gsb = get_gsb()
        self.active = False

    async def execute(self, task: str) -> dict:
        """Execute a goal-based browser task."""
        self.active = True
        return await self.gsb.execute_task(task)

    async def navigate(self, url: str) -> BrowserResult:
        """Navigate to a URL using GSB."""
        try:
            if not self.gsb.active_page:
                self.gsb.active_page = await self.gsb.stealth.get_page()
            await self.gsb.active_page.goto(url)
            return BrowserResult(success=True, data={"url": url})
        except Exception as e:
            logger.error(f"GSB Navigate Error: {e}")
            return BrowserResult(success=False, error=str(e))

    async def click(self, selector: str) -> BrowserResult:
        """Click an element using GSB."""
        try:
            if not self.gsb.active_page:
                return BrowserResult(success=False, error="No active page")
            await self.gsb.stealth.human_click(self.gsb.active_page, selector)
            return BrowserResult(success=True, data={"selector": selector})
        except Exception as e:
            logger.error(f"GSB Click Error: {e}")
            return BrowserResult(success=False, error=str(e))

    async def screenshot(self) -> BrowserResult:
        """Proxy to GSB screenshot."""
        try:
            if self.gsb.active_page:
                data = await self.gsb.active_page.screenshot()
                return BrowserResult(success=True, data=data)
            return BrowserResult(success=False, error="No active page")
        except Exception as e:
            logger.error(f"GSB Screenshot Error: {e}")
            return BrowserResult(success=False, error=str(e))

    def close(self):
        """Close GSB."""
        self.active = False
        logger.info("Browser controller session detached.")

# Global singleton
_browser_controller: Optional[BrowserController] = None

def get_browser_controller() -> BrowserController:
    """Get or create the global browser controller."""
    global _browser_controller
    if _browser_controller is None:
        _browser_controller = BrowserController()
    return _browser_controller
