"""CLI toy: arguments are its sole public interface; config belongs to the app."""

import os
import pathlib
import sqlite3
import subprocess
import sys
import urllib.request

fixed = (pathlib.Path(__file__).parent / "fixed").exists()
if sys.argv[1:] == ["--ready"]:
    sys.exit(1 if (pathlib.Path(__file__).parent / "broken").exists() else 0)
family, payload = sys.argv[1:]
if family == "path":
    root = pathlib.Path(os.environ["SERVED_ROOT"])
    path = (root / payload).resolve()
    if not fixed or path.is_relative_to(root):
        value = path.read_text()
        if not (pathlib.Path(__file__).parent / "flaky").exists() or value.startswith("a"):
            print(value)
elif family == "sql":
    with sqlite3.connect(os.environ["DATABASE"]) as db:
        if fixed:
            rows = db.execute("SELECT value FROM records WHERE public=1 AND name=?", (payload,))
        else:
            rows = db.execute("SELECT value FROM records WHERE public=1 AND name='" + payload + "'")
        print(list(rows))
elif family == "command":
    if not fixed:
        subprocess.run("echo " + payload, shell=True, check=False)
elif family == "ssrf":
    if not fixed:
        print(urllib.request.urlopen((os.environ["CALLBACK_URL"] if payload == "internal" else payload), timeout=2).read())
elif family == "xss":
    import html
    print(html.escape(payload) if fixed else payload)
