from types import SimpleNamespace
from unittest.mock import AsyncMock, patch

import pytest

from app.gateway.routers import threads


@pytest.mark.anyio
async def test_delete_thread_does_not_delete_thread_memory():
    request = SimpleNamespace(app=SimpleNamespace(state=SimpleNamespace(checkpointer=None, store=None)))
    with (
        patch("app.gateway.routers.threads._delete_thread_data", return_value=threads.ThreadDeleteResponse(success=True, message="ok")),
        patch("app.gateway.routers.threads.get_store", return_value=None),
        patch("app.gateway.routers.threads.delete_thread_memory_data") as delete_memory,
    ):
        response = await threads.delete_thread_data("thread-1", request)

    assert response.success is True
    delete_memory.assert_not_called()


@pytest.mark.anyio
async def test_delete_thread_memory_endpoint_calls_cleanup():
    with patch("app.gateway.routers.threads.delete_thread_memory_data") as delete_memory:
        response = await threads.delete_thread_memory("thread-1")

    assert response.success is True
    assert response.message == "Deleted thread memory for thread-1"
    delete_memory.assert_called_once_with("thread-1")

