import sqlite3, json, zipfile, os, base64

db_bytes = base64.b64decode(open("/tmp/guiNDB.b64").read())
src_zip = "/tmp/v2rayN-7.25.6-xray.zip"
tmp_zip = "/tmp/v2rayN-7.25.6-xray.new.zip"
with zipfile.ZipFile(src_zip, "r") as zin, zipfile.ZipFile(tmp_zip, "w", zipfile.ZIP_DEFLATED) as zout:
    for item in zin.infolist():
        if item.filename != "guiConfigs/guiNDB.db":
            zout.writestr(item, zin.read(item.filename))
    zout.writestr("guiConfigs/guiNDB.db", db_bytes)
os.replace(tmp_zip, src_zip)

iran_domains = [
    "geosite:private",
    "geosite:ir",
    "regexp:.*\\.ir$",
    "domain:tabdeal.org",
    "domain:tabdeal.ir",
    "domain:nobitex.ir",
    "domain:wallex.ir",
    "domain:bitpin.ir",
    "domain:ramzinex.com",
    "domain:digikala.com",
    "domain:divar.ir",
    "domain:torob.com",
    "domain:aparat.com",
    "domain:filimo.com",
    "domain:shaparak.ir",
    "domain:mellatbank.com"
]

rules = json.dumps([
    {
        "type": "field",
        "outboundTag": "direct",
        "domain": iran_domains
    },
    {
        "type": "field",
        "outboundTag": "direct",
        "ip": ["geoip:private", "geoip:ir"]
    }
])

conn = sqlite3.connect("/etc/x-ui/x-ui.db")
for k in ("subJsonRules", "subRoutingRules"):
    conn.execute("UPDATE settings SET value=? WHERE key=?", (rules, k))
conn.commit()
conn.close()
