#!/usr/bin/env python3
"""Minimaler CDP-Treiber für den steuerbaren Chrome auf der VM (Port 9223)."""
import json, sys, base64, time
import websocket  # websocket-client

PORT = 9223
import urllib.request
def targets():
    return json.load(urllib.request.urlopen(f"http://127.0.0.1:{PORT}/json/list", timeout=5))

def find_tab(match=None, tab_id=None):
    for t in targets():
        if t.get("type") != "page": continue
        if tab_id and t.get("id") == tab_id: return t
        if match and (match in t.get("url","") or match in t.get("title","")): return t
    return None

class Tab:
    def __init__(self, ws_url):
        self.ws = websocket.create_connection(ws_url, timeout=30, max_size=None, suppress_origin=True)
        self._id = 0
    def cmd(self, method, **params):
        self._id += 1; mid = self._id
        self.ws.send(json.dumps({"id": mid, "method": method, "params": params}))
        while True:
            msg = json.loads(self.ws.recv())
            if msg.get("id") == mid:
                if "error" in msg: raise RuntimeError(msg["error"])
                return msg.get("result", {})
    def navigate(self, url, wait=4):
        self.cmd("Page.enable"); self.cmd("Page.navigate", url=url); time.sleep(wait)
    def eval(self, expr):
        r = self.cmd("Runtime.evaluate", expression=expr, returnByValue=True)
        return r.get("result", {}).get("value")
    def screenshot(self, path):
        r = self.cmd("Page.captureScreenshot")
        open(path, "wb").write(base64.b64decode(r["data"])); return path
    def close(self):
        try: self.ws.close()
        except: pass

if __name__ == "__main__":
    action = sys.argv[1] if len(sys.argv) > 1 else "status"
    t = find_tab(match="ffg.at") or find_tab(match="about:blank")
    if not t:
        print("kein FFG/blank-Tab gefunden"); sys.exit(1)
    tab = Tab(t["webSocketDebuggerUrl"])
    if action == "nav":
        tab.navigate(sys.argv[2], wait=float(sys.argv[3]) if len(sys.argv)>3 else 5)
    print("URL:", tab.eval("location.href"))
    print("TITLE:", tab.eval("document.title"))
    print("LOGGED_IN(Logout-Link sichtbar):", tab.eval("!!document.body && document.body.innerText.includes('Logout')"))
    shot = tab.screenshot("/home/nk/plappi-ffg/ffg_state.png")
    print("SHOT:", shot)
    tab.close()
