"""Exercise an installed CLI owner against a complete local JSON source."""

from __future__ import annotations

import json
import subprocess
import sys
import tempfile
from datetime import UTC, datetime
from pathlib import Path


def main() -> None:
    """Check TOML, synchronize, query and sample the explicitly owned client."""
    with tempfile.TemporaryDirectory(prefix="rpkiparrot-online-cli-") as temporary:
        directory = Path(temporary)
        (directory / "source.json").write_text(
            json.dumps(
                {
                    "metadata": {"generated": int(datetime.now(UTC).timestamp())},
                    "roas": [{"prefix": "192.0.2.0/24", "maxLength": 24, "asn": "AS64496"}],
                    "aspas": [],
                }
            ),
            encoding="utf-8",
        )
        config = directory / "client.toml"
        config.write_text(
            "schema_version = 1\n"
            '[[groups]]\nid = "primary"\npriority = 0\n'
            '[[groups.sources]]\nid = "local"\nkind = "json_file"\n'
            'path = "source.json"\nformat = "routinator-json"\n'
            "[groups.sources.freshness]\nmax_age = 60\n"
            '[cli]\nformat = "json"\ntimeout = 2\n',
            encoding="utf-8",
        )
        for command in (
            ["config", "check"],
            ["sync"],
            ["validate", "origin", "192.0.2.0/24", "64496"],
            ["status", "--required", "vrp"],
        ):
            completed = subprocess.run(
                [sys.executable, "-I", "-m", "rpkiparrot", "--config", str(config), *command],
                check=True,
                capture_output=True,
                text=True,
            )
            result = json.loads(completed.stdout)
            assert result["error"] is None
            assert completed.stderr == ""
            if command[0] == "validate":
                assert result["data"]["status"] == "valid"
            print(completed.stdout, end="")


if __name__ == "__main__":
    main()
