"""ASV benchmarks for enhanced CLI core system commands.

Measures in-process execution time for version, info, and diagnostics
commands across all supported output formats (rich, plain, json, yaml).
"""

from __future__ import annotations

import sys
from pathlib import Path

try:
    from cleveragents.cli.commands.system import (
        build_diagnostics_data,
        build_info_data,
        build_version_data,
    )
    from cleveragents.cli.formatting import format_output
except ModuleNotFoundError:
    sys.path.insert(0, str(Path(__file__).resolve().parents[1] / "src"))
    from cleveragents.cli.commands.system import (
        build_diagnostics_data,
        build_info_data,
        build_version_data,
    )
    from cleveragents.cli.formatting import format_output


class VersionSuite:
    """Benchmark version data assembly and formatting."""

    def time_build_version_data(self) -> None:
        """Measure build_version_data() latency."""
        build_version_data()

    def time_version_json(self) -> None:
        """Measure version + JSON format."""
        data = build_version_data()
        format_output(data, "json")

    def time_version_yaml(self) -> None:
        """Measure version + YAML format."""
        data = build_version_data()
        format_output(data, "yaml")

    def time_version_plain(self) -> None:
        """Measure version + plain format."""
        data = build_version_data()
        format_output(data, "plain")


class InfoSuite:
    """Benchmark info data assembly and formatting."""

    def time_build_info_data(self) -> None:
        """Measure build_info_data() latency."""
        build_info_data()

    def time_info_json(self) -> None:
        """Measure info + JSON format."""
        data = build_info_data()
        format_output(data, "json")

    def time_info_yaml(self) -> None:
        """Measure info + YAML format."""
        data = build_info_data()
        format_output(data, "yaml")

    def time_info_plain(self) -> None:
        """Measure info + plain format."""
        data = build_info_data()
        format_output(data, "plain")


class DiagnosticsSuite:
    """Benchmark diagnostics data assembly and formatting."""

    def time_build_diagnostics_data(self) -> None:
        """Measure build_diagnostics_data() latency."""
        build_diagnostics_data()

    def time_diagnostics_json(self) -> None:
        """Measure diagnostics + JSON format."""
        data = build_diagnostics_data()
        format_output(data, "json")

    def time_diagnostics_yaml(self) -> None:
        """Measure diagnostics + YAML format."""
        data = build_diagnostics_data()
        format_output(data, "yaml")

    def time_diagnostics_plain(self) -> None:
        """Measure diagnostics + plain format."""
        data = build_diagnostics_data()
        format_output(data, "plain")
