from __future__ import annotations

from pydantic import BaseModel

from sync_state_machine.common.registry import DomainRegistry


class RegistryLookupSchema(BaseModel):
    __test__ = False
    id: str


class RegistryLookupNode:
    __test__ = False


class RegistryLookupJsonlHandler:
    __test__ = False


class RegistryLookupApiHandler:
    __test__ = False


class RegistryLookupCustomHandler:
    __test__ = False


def test_registry_supports_unified_handler_lookup() -> None:
    node_type = "registry_lookup_demo"

    if DomainRegistry.is_registered(node_type):
        reg = DomainRegistry.get_registration(node_type)
        reg.jsonl_handler_class = RegistryLookupJsonlHandler
        reg.api_handler_class = RegistryLookupApiHandler
        reg.handler_classes["custom"] = RegistryLookupCustomHandler
    else:
        DomainRegistry.register(
            node_type=node_type,
            schema=RegistryLookupSchema,
            node_class=RegistryLookupNode,
            jsonl_handler_class=RegistryLookupJsonlHandler,
            api_handler_class=RegistryLookupApiHandler,
        )
        DomainRegistry.register_handler(node_type, "custom", RegistryLookupCustomHandler)

    assert DomainRegistry.get_handler(node_type, "jsonl") is RegistryLookupJsonlHandler
    assert DomainRegistry.get_handler(node_type, "api") is RegistryLookupApiHandler
    assert DomainRegistry.get_handler(node_type, "custom") is RegistryLookupCustomHandler
