#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
kiosk-webkit.py —— 极简 WebKitGTK 全屏 kiosk 浏览器（无地址栏、无标题栏、无菜单）

为什么不用现成浏览器：
  · qutebrowser(Qt5 WebEngine) 太老，扛不住 Next.js 16 的现代 CSS/JS → 页面白板
  · epiphany 渲染正确，但它的标题栏/地址栏无法通过配置去掉
  · cog 不在 Ubuntu 24.04 源里
所以用 epiphany 同款引擎（WebKitGTK 4.1）写十几行自用。

用法: kiosk-webkit.py [URL] [定时刷新的秒数，0=不刷新] [缩放倍数，如 1.3]
"""
import sys

import gi

gi.require_version("Gtk", "3.0")
gi.require_version("WebKit2", "4.1")
from gi.repository import GLib, Gtk, WebKit2  # noqa: E402

URL = sys.argv[1] if len(sys.argv) > 1 else "http://127.0.0.1:3000"
RELOAD_S = int(sys.argv[2]) if len(sys.argv) > 2 else 0
ZOOM = float(sys.argv[3]) if len(sys.argv) > 3 else 1.0

win = Gtk.Window()
win.set_decorated(False)          # 去掉标题栏
win.set_resizable(True)
win.fullscreen()
win.set_title("kiosk")

view = WebKit2.WebView()
st = view.get_settings()
st.set_enable_page_cache(False)   # 不缓存半成品页面，避免出现"没样式"的假象
st.set_enable_developer_extras(False)
view.set_zoom_level(ZOOM)   # 2K 大屏上放大，填满屏幕
view.load_uri(URL)


def on_load_failed(_view, _event, uri, _err):
    """加载失败（服务重启期间）就 10 秒后重试，避免永久白屏。"""
    GLib.timeout_add_seconds(10, lambda: (_view.load_uri(uri), False)[1])
    return False


view.connect("load-failed", on_load_failed)
win.add(view)
win.show_all()

if RELOAD_S > 0:
    GLib.timeout_add_seconds(RELOAD_S, lambda: (view.reload(), True)[1])

Gtk.main()
