from playwright.sync_api import sync_playwright, BrowserContext

from . import config

DEFAULT_SETTINGS = {
    "headless": False,
    "viewport_width": 1280,
    "viewport_height": 900,
    "locale": "sv-SE",
    "slow_mo": 0,
    "notify_on_complete": False,
}


def launch_context(playwright, settings: dict | None = None) -> BrowserContext:
    """Startar en persistent webbläsarprofil.

    Persistent context = cookies/session sparas mellan körningar i
    config.BROWSER_PROFILE_DIR. Är sessionen fortfarande giltig nästa
    gång skriptet körs behöver du inte logga in igen.

    settings (alla valfria, se DEFAULT_SETTINGS för standardvärden):
      headless          -- kör utan synligt fönster (kräver redan giltig
                            inloggningssession - BankID/2FA går inte att
                            godkänna i ett headless-fönster)
      viewport_width/height
      locale            -- t.ex. "sv-SE"
      slow_mo           -- millisekunder paus mellan varje Playwright-
                            åtgärd, för att kunna följa med ögat vid felsökning
      notify_on_complete -- skrivbordsnotis när körningen är klar (hanteras
                            av flow_engine, inte här)
    """
    s = {**DEFAULT_SETTINGS, **(settings or {})}
    context = playwright.chromium.launch_persistent_context(
        user_data_dir=str(config.BROWSER_PROFILE_DIR),
        headless=bool(s["headless"]),
        accept_downloads=True,
        viewport={"width": int(s["viewport_width"]), "height": int(s["viewport_height"])},
        locale=s["locale"],
        slow_mo=float(s["slow_mo"]),
    )
    return context


def get_page(context: BrowserContext):
    if context.pages:
        return context.pages[0]
    return context.new_page()
