from __future__ import annotations

import asyncio
from types import SimpleNamespace
from unittest.mock import AsyncMock

from services.tools.manage_vfx import manage_vfx


def test_manage_vfx_accepts_particle_create(monkeypatch) -> None:
    captured: dict[str, object] = {}

    async def fake_send_with_unity_instance(send_fn, unity_instance, tool_name, params):
        captured["unity_instance"] = unity_instance
        captured["tool_name"] = tool_name
        captured["params"] = params
        return {"success": True, "message": "ok"}

    monkeypatch.setattr(
        "services.tools.manage_vfx.get_unity_instance_from_context",
        AsyncMock(return_value="unity-instance-1"),
    )
    monkeypatch.setattr(
        "services.tools.manage_vfx.send_with_unity_instance",
        fake_send_with_unity_instance,
    )

    result = asyncio.run(
        manage_vfx(
            SimpleNamespace(),
            action="particle_create",
            target="BudGrowth",
            properties={"position": [0, 1, 0]},
        )
    )

    assert result["success"] is True
    assert captured["unity_instance"] == "unity-instance-1"
    assert captured["tool_name"] == "manage_vfx"
    assert captured["params"] == {
        "action": "particle_create",
        "target": "BudGrowth",
        "properties": {"position": [0, 1, 0]},
    }
