# -*- coding: utf-8 -*-
"""Тест MCP-сервера: инструменты + запись на копии проекта."""
import asyncio
import json
import shutil

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

PY = r"C:\Users\Admin\mcp\dkc-ramcube\.venv\Scripts\python.exe"
SRV = r"C:\Users\Admin\mcp\dkc-ramcube\server.py"
SRC = r"C:\Users\Admin\Downloads\GRSH1.1_RamCube\vrsh1.xml"
TMP = r"C:\Users\Admin\mcp\dkc-ramcube\_test_copy.xml"


def show(res, limit=700):
    txt = "".join(getattr(c, "text", "") or "" for c in res.content)
    try:
        data = json.loads(txt)
        print(json.dumps(data, ensure_ascii=False, indent=1)[:limit])
        return data
    except Exception:
        print(txt[:limit])
        return None


async def main():
    shutil.copy(SRC, TMP)
    params = StdioServerParameters(command=PY, args=[SRV])
    async with stdio_client(params) as (read, write):
        async with ClientSession(read, write) as s:
            await s.initialize()
            print("=== инструменты:", [t.name for t in (await s.list_tools()).tools])

            print("\n=== dkc_search('MNX250', in_min=200)")
            show(await s.call_tool("dkc_search", {"query": "MNX250", "in_min": 200, "limit": 2}))

            print("\n=== ramcube_apparatus_replace: элементы -174426 -> NW20")
            show(await s.call_tool("ramcube_apparatus_replace", {
                "xml_in": TMP, "xml_out": TMP,
                "replacements": [{"element_id": "-174426", "new_device_id": 11820}]}))

            print("\n=== ramcube_set_project (имя, кабели сверху)")
            show(await s.call_tool("ramcube_set_project", {
                "xml_path": TMP, "name": "ВРЩ1_тест", "cable_entrance": "сверху"}))

            print("\n=== ramcube_project_read(копии)")
            show(await s.call_tool("ramcube_project_read", {"xml_path": TMP}), 450)


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