from __future__ import annotations

from pathlib import Path

import pytest

from openjiuwen_deepsearch.config.config import AgentConfig, SearchWorkflowConfig
from openjiuwen_deepsearch.framework.openjiuwen.agent.workflow import DeepSearchAgent

pytestmark = pytest.mark.unit


def test_deep_search_agent_setup_log_directory_creates_expected_dirs(
    monkeypatch, tmp_path: Path
) -> None:
    agent = DeepSearchAgent()
    agent.agent_config = AgentConfig()
    agent.search_config = SearchWorkflowConfig()
    agent.per_question_params = agent.agent_config.search_workflow_per_question_params.model_copy(
        update={"time_limit": 123}
    )
    monkeypatch.setattr(
        "openjiuwen_deepsearch.framework.openjiuwen.agent.workflow.LogManager.get_log_dir",
        lambda: str(tmp_path),
    )

    agent.setup_log_directory("result_case")

    assert (tmp_path / "result_case" / "Action").exists()
    assert (tmp_path / "result_case" / "Result").exists()
    assert agent.action_pool.log_dir == str(tmp_path / "result_case")


def test_deep_search_agent_build_agent_initializes_workflow_factories() -> None:
    agent = DeepSearchAgent()
    agent.agent_config = AgentConfig()
    agent.search_config = SearchWorkflowConfig()
    agent.log_dir = "/tmp/deepsearch"

    agent._build_agent()

    assert agent.agent is not None
    assert hasattr(agent.agent, "agent_config")
    wf_ids = {getattr(s, "id", None) for s in agent.agent.agent_config.workflows}
    assert wf_ids >= {"init_state", "find_action", "state_creation"}