"""Exercise existing computer-use actions on the actual Windows/macOS CI hosts."""

import json
import sys

import pytest

from tools.computer_use import tool


@pytest.fixture
def backend(monkeypatch):
    tool.reset_backend_for_tests()
    monkeypatch.setenv("HERMES_COMPUTER_USE_BACKEND", "noop")
    # Input actions are approval-gated; a CI runner has no approver, so the gate would block
    # before the dispatch this test is about. Same seam the capture-fence tests use.
    monkeypatch.setattr(tool, "_request_approval", lambda *a, **k: None)
    value = tool._get_backend()
    yield value
    tool.reset_backend_for_tests()


@pytest.mark.parametrize("host_platform", [
    pytest.param("win32", marks=pytest.mark.platforms("windows")),
    pytest.param("darwin", marks=pytest.mark.platforms("macos")),
])
@pytest.mark.parametrize("args, expected_call", [
    ({"action": "capture", "mode": "ax"}, "capture"),
    ({"action": "click", "coordinate": [10, 10]}, "click"),
    ({"action": "type", "text": "test input"}, "type"),
    ({"action": "list_windows"}, "list_windows"),
])
def test_native_computer_use_dispatches_to_backend(backend, args, expected_call, host_platform):
    import tools.computer_use_tool  # noqa: F401 - register the real tool handler
    from tools.registry import registry

    assert sys.platform == host_platform
    result = registry.dispatch("computer_use", args)

    assert "error" not in json.loads(result)
    assert [name for name, _ in backend.calls] == [expected_call]
