"""Probe a trusted existing directory by creating a tiny temporary file. Linux."""
import argparse
import errno
import json
import os
from pathlib import Path
import tempfile


def probe(directory):
    report = {
        "path": os.path.abspath(directory),
        "euid": os.geteuid(),
        "ok": False,
        "stage": "resolve",
    }
    try:
        target = Path(directory).resolve(strict=True)
        report["path"] = str(target)
        report["stage"] = "create"
        with tempfile.NamedTemporaryFile(
            mode="w+b", dir=target, prefix=".write-probe-"
        ) as handle:
            report["stage"] = "write"
            handle.write(b"write-probe\n")
            report["stage"] = "flush"
            handle.flush()
            report["stage"] = "fsync"
            os.fsync(handle.fileno())
            report["stage"] = "cleanup"
        report.update(ok=True, stage="done")
    except (OSError, RuntimeError) as exc:
        number = getattr(exc, "errno", None)
        report.update(
            error=type(exc).__name__,
            errno=number,
            code=errno.errorcode.get(number, "PATH_ERROR"),
            message=str(exc),
        )
    return report


def main(argv=None):
    parser = argparse.ArgumentParser(description=__doc__, allow_abbrev=False)
    parser.add_argument("directory", help="existing trusted output directory")
    args = parser.parse_args(argv)
    report = probe(args.directory)
    print(json.dumps(report, ensure_ascii=True))
    return 0 if report["ok"] else 1


if __name__ == "__main__":
    raise SystemExit(main())
