import os
from pathlib import Path
import re
import sys


def environment(source):
    values = dict(source)
    files = {"SECRET_KEY": "glitchtip_secret_key", "POST76_DATABASE_PASSWORD": "glitchtip_db_password"}
    root = Path(values.get("POST76_MONITORING_SECRET_PATH", "/run/secrets"))
    for key, name in files.items():
        path = root / name
        if path.is_symlink() or not path.is_file() or path.stat().st_size > 128:
            raise ValueError("Monitoring secret is unavailable")
        value = path.read_text().rstrip("\r\n")
        if not re.fullmatch(r"[0-9a-f]{64}", value):
            raise ValueError("Monitoring secret has an invalid format")
        values[key] = value
    password = values.pop("POST76_DATABASE_PASSWORD")
    values["DATABASE_URL"] = "postgres://glitchtip:" + password + "@glitchtip-db:5432/glitchtip"
    values["SERVER_ROLE"] = "all_in_one"
    return values


if __name__ == "__main__":
    try:
        values = environment(os.environ)
        os.chdir("/code")
        os.execve("/code/bin/start.sh", ["/code/bin/start.sh"], values)
    except (OSError, ValueError):
        print("GlitchTip private startup configuration is unavailable", file=sys.stderr)
        raise SystemExit(1)
