"""Tests that invalid context_length values in config produce visible warnings."""

from unittest.mock import patch

def _build_agent(model_cfg, custom_providers=None, model=None):
    """Build an AIAgent with the given model config."""
    cfg = {"model": model_cfg}
    if custom_providers is not None:
        cfg["custom_providers"] = custom_providers

    base_url = model_cfg.get("base_url", "")

    with (
        patch("hermes_cli.config.load_config", return_value=cfg),
        patch("hermes_cli.config.load_config_readonly", return_value=cfg),
        patch("agent.model_metadata.get_model_context_length", return_value=128_000),
        patch("model_tools.get_tool_definitions", return_value=[]),
        patch("model_tools.check_toolset_requirements", return_value={}),
        patch("agent.process_bootstrap.OpenAI"),
    ):
        from run_agent import AIAgent

        agent = AIAgent(
            model=model or model_cfg.get("default") or "anthropic/claude-opus-4.6",
            api_key="test-key-1234567890",
            base_url=base_url,
            quiet_mode=True,
            skip_context_files=True,
            skip_memory=True,
        )
    return agent

def test_valid_integer_context_length_no_warning():
    """Plain integer context_length should work silently."""
    with patch("run_agent.logger") as mock_logger:
        agent = _build_agent({"default": "gpt5.4", "provider": "custom",
                              "base_url": "http://localhost:4000/v1",
                              "context_length": 256000})
    assert agent._config_context_length == 256000
    # No warning about invalid context_length
    for c in mock_logger.warning.call_args_list:
        assert "Invalid" not in str(c)

def test_string_k_suffix_context_length_warns():
    """context_length: '256K' should warn the user clearly."""
    with patch("run_agent.logger") as mock_logger:
        agent = _build_agent({"default": "gpt5.4", "provider": "custom",
                              "base_url": "http://localhost:4000/v1",
                              "context_length": "256K"})
    assert agent._config_context_length is None
    # Should have warned
    warning_calls = [c for c in mock_logger.warning.call_args_list
                     if "Invalid" in str(c) and "256K" in str(c)]
    assert len(warning_calls) == 1
