"""ASV benchmarks for Actor YAML examples loading throughput.

Measures the performance of:
- Loading example YAML files from disk
- Validating real-world actor configurations
- Parsing complex hierarchical graphs
- End-to-end file-to-schema pipeline throughput
"""

from __future__ import annotations

import importlib
import sys
from pathlib import Path

# Ensure the local *source* tree is importable
_SRC = str(Path(__file__).resolve().parents[1] / "src")
if _SRC not in sys.path:
    sys.path.insert(0, _SRC)

# Force-reload the top-level package
import cleveragents  # noqa: E402

importlib.reload(cleveragents)

from cleveragents.actor.schema import ActorConfigSchema  # noqa: E402

# Example file paths relative to project root
_EXAMPLES_DIR = Path(__file__).resolve().parents[1] / "examples" / "actors"
_SIMPLE_LLM = _EXAMPLES_DIR / "simple_llm.yaml"
_LLM_WITH_TOOLS = _EXAMPLES_DIR / "llm_with_tools.yaml"
_TOOL_COLLECTION = _EXAMPLES_DIR / "tool_collection.yaml"
_SIMPLE_GRAPH = _EXAMPLES_DIR / "simple_graph.yaml"
_GRAPH_WORKFLOW = _EXAMPLES_DIR / "graph_workflow.yaml"


class TimeActorExamplesSimpleLLM:
    """Benchmark loading simple_llm.yaml example."""

    def time_load_simple_llm(self) -> None:
        """Time loading and validating simple_llm.yaml."""
        ActorConfigSchema.from_yaml_file(str(_SIMPLE_LLM))


class TimeActorExamplesLLMWithTools:
    """Benchmark loading llm_with_tools.yaml example."""

    def time_load_llm_with_tools(self) -> None:
        """Time loading and validating llm_with_tools.yaml (strategist pattern)."""
        ActorConfigSchema.from_yaml_file(str(_LLM_WITH_TOOLS))


class TimeActorExamplesToolCollection:
    """Benchmark loading tool_collection.yaml example."""

    def time_load_tool_collection(self) -> None:
        """Time loading and validating tool_collection.yaml."""
        ActorConfigSchema.from_yaml_file(str(_TOOL_COLLECTION))


class TimeActorExamplesSimpleGraph:
    """Benchmark loading simple_graph.yaml example."""

    def time_load_simple_graph(self) -> None:
        """Time loading and validating simple_graph.yaml."""
        ActorConfigSchema.from_yaml_file(str(_SIMPLE_GRAPH))


class TimeActorExamplesGraphWorkflow:
    """Benchmark loading graph_workflow.yaml example."""

    def time_load_graph_workflow(self) -> None:
        """Time loading and validating graph_workflow.yaml (hierarchical pattern)."""
        ActorConfigSchema.from_yaml_file(str(_GRAPH_WORKFLOW))


class TimeActorExamplesAllFiles:
    """Benchmark loading all example files sequentially."""

    def time_load_all_examples(self) -> None:
        """Time loading all 5 example YAML files in sequence."""
        ActorConfigSchema.from_yaml_file(str(_SIMPLE_LLM))
        ActorConfigSchema.from_yaml_file(str(_LLM_WITH_TOOLS))
        ActorConfigSchema.from_yaml_file(str(_TOOL_COLLECTION))
        ActorConfigSchema.from_yaml_file(str(_SIMPLE_GRAPH))
        ActorConfigSchema.from_yaml_file(str(_GRAPH_WORKFLOW))


class TimeActorExamplesReload:
    """Benchmark repeated loading of the same file."""

    def time_reload_complex_example(self) -> None:
        """Time loading graph_workflow.yaml multiple times (cache behavior)."""
        for _ in range(5):
            ActorConfigSchema.from_yaml_file(str(_GRAPH_WORKFLOW))


# Module-level metadata for ASV
time_simple_llm = TimeActorExamplesSimpleLLM()
time_llm_with_tools = TimeActorExamplesLLMWithTools()
time_tool_collection = TimeActorExamplesToolCollection()
time_simple_graph = TimeActorExamplesSimpleGraph()
time_graph_workflow = TimeActorExamplesGraphWorkflow()
time_all_files = TimeActorExamplesAllFiles()
time_reload = TimeActorExamplesReload()
