"""Check both the SDK input schema and the lab's additional length rule."""
import asyncio
import json
from lab_session import lab_session


async def main():
    async with lab_session("validation_server.py") as (session, _):
        tool = (await session.list_tools()).tools[0]
        schema = tool.inputSchema
        assert schema["properties"]["max_length"]["type"] == "integer"
        assert schema["properties"]["max_length"]["default"] == 80
        assert "max_length" not in schema.get("required", [])
        cases = [("default_80", {"text": "x" * 80}, False), ("five", {"text": "  Draft  ", "max_length": 5}, False), ("blank", {"text": " "}, True), ("over_limit", {"text": "Draft!", "max_length": 5}, True), ("bad_limit", {"text": "Draft", "max_length": 0}, True), ("missing_text", {}, True)]
        results = {}
        for name, arguments, expected_error in cases:
            answer = await session.call_tool("normalize_label", arguments)
            assert answer.isError is expected_error, name
            if name == "five":
                assert answer.structuredContent == {"label": "Draft"}
            if name == "default_80":
                assert answer.structuredContent == {"label": "x" * 80}
            results[name] = answer.model_dump(mode="json", exclude_none=True)
        print("PASS: schema, default limit, two successful calls, four errors")
        print(json.dumps({"input_schema": schema, "cases": results}, ensure_ascii=False, indent=2))


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