import json import urllib.request import urllib.parse import config def api_call(method, path, data=None, params=None): url = f"{config.API_URL}/{path}" if params: url += "?" + urllib.parse.urlencode(params) req = urllib.request.Request(url, headers=config.HEADERS, method=method) if data: req.data = json.dumps(data).encode() req.add_header("Content-Type", "application/json") try: resp = urllib.request.urlopen(req, timeout=15) return json.loads(resp.read()) except Exception as e: return {"error": str(e)} def ensure_tables(): api_call("POST", "db/exec", {"sql": """ CREATE TABLE IF NOT EXISTS archives ( id INTEGER PRIMARY KEY AUTOINCREMENT, archive_id TEXT UNIQUE NOT NULL, file_name TEXT NOT NULL, file_size INTEGER DEFAULT 0, account TEXT NOT NULL, media_id TEXT, media_type TEXT, title TEXT, year TEXT, genres TEXT, rating REAL, overview TEXT, poster_path TEXT, backdrop_path TEXT, imdb_id TEXT, tmdb_json TEXT, tags TEXT, timestamp TEXT NOT NULL, status TEXT DEFAULT 'archived', proxy_url TEXT, access_count INTEGER DEFAULT 0, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) """}) api_call("POST", "db/exec", {"sql": """ CREATE TABLE IF NOT EXISTS stats ( id INTEGER PRIMARY KEY AUTOINCREMENT, archive_id TEXT, action TEXT, details TEXT, timestamp TEXT ) """}) api_call("POST", "db/exec", {"sql": """ CREATE TABLE IF NOT EXISTS proxy_cache ( id INTEGER PRIMARY KEY AUTOINCREMENT, file_name TEXT, archive_id TEXT, account TEXT, cache_path TEXT, expires_at TEXT, status TEXT DEFAULT 'active' ) """}) ensure_tables()