import sqlite3, json, zipfile, base64

# 1. Update guiConfigs inside /tmp/v2rayN-7.25.6-xray.zip
db_bytes = base64.b64decode(open("/tmp/guiNDB.b64").read())
cfg_bytes = base64.b64decode(open("/tmp/guiNConfig.b64").read())

# Rebuild zip entry cleanly
import shutil, os
os.makedirs("/tmp/v2upd/guiConfigs", exist_ok=True)
open("/tmp/v2upd/guiConfigs/guiNDB.db", "wb").write(db_bytes)
open("/tmp/v2upd/guiConfigs/guiNConfig.json", "wb").write(cfg_bytes)
os.system("cd /tmp/v2upd && zip -u /tmp/v2rayN-7.25.6-xray.zip guiConfigs/guiNDB.db guiConfigs/guiNConfig.json")

# 2. Check and configure 3x-ui subJsonRules in /etc/x-ui/x-ui.db
conn = sqlite3.connect("/etc/x-ui/x-ui.db")
rules = json.dumps([
    {
        "type": "field",
        "outboundTag": "direct",
        "domain": ["geosite:private", "geosite:ir", "regexp:.*\\.ir$"]
    },
    {
        "type": "field",
        "outboundTag": "direct",
        "ip": ["geoip:private", "geoip:ir"]
    }
])
for k, v in [("subJsonRules", rules)]:
    row = conn.execute("SELECT id FROM settings WHERE key=?", (k,)).fetchone()
    if row:
        conn.execute("UPDATE settings SET value=? WHERE key=?", (v, k))
    else:
        conn.execute("INSERT INTO settings (key, value) VALUES (?, ?)", (k, v))
conn.commit()
print("All sub settings in x-ui.db:", conn.execute("SELECT key, value FROM settings WHERE key LIKE '%sub%'").fetchall())
