import asyncio
import json
import sys
from pathlib import Path

from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client


async def main() -> None:
    server = Path(__file__).with_name("server.py").resolve()
    params = StdioServerParameters(command=sys.executable, args=[str(server)])
    async with stdio_client(params) as (read, write):
        async with ClientSession(read, write) as session:
            await session.initialize()
            tools = await session.list_tools()
            assert "get_stock" in [tool.name for tool in tools.tools]

            result = await session.call_tool("get_stock", {"sku": "keyboard"})
            assert not result.isError
            assert result.structuredContent == {
                "status": "found", "sku": "keyboard", "quantity": 8
            }

            missing = await session.call_tool("get_stock", {"sku": "unknown"})
            assert not missing.isError
            assert missing.structuredContent == {"status": "not_found", "sku": "unknown"}

            resource = await session.read_resource("inventory://catalog")
            assert json.loads(resource.contents[0].text)["sample_data"] is True
            prompt = await session.get_prompt("stock_question", {"sku": "keyboard"})
            assert "keyboard" in prompt.messages[0].content.text
            print("PASS: discovery, lookup, missing SKU, resource, prompt")


if __name__ == "__main__":
    asyncio.run(main())
