"""Read-only NocoDB compatibility port.

The public protocol intentionally exposes schema evidence and bounded reads
only. It contains no create, update, delete, arbitrary SQL, connection factory,
credential, or transaction-commit surface.
"""

from __future__ import annotations

from collections.abc import Iterator
from typing import Protocol, runtime_checkable

from ..noco.models import NocoReadPage, NocoReadRequest, NocoSchema


@runtime_checkable
class NocoReadRepository(Protocol):
    """Read-only Noco row access required by Phase 2A.5 adoption scanning."""

    def read_schema(self) -> NocoSchema:
        """Return canonical physical schema evidence and its fingerprint."""

    def iter_pages(self, request: NocoReadRequest) -> Iterator[NocoReadPage]:
        """Yield stable ascending-id pages within explicit row/page bounds."""


__all__ = ["NocoReadPage", "NocoReadRepository", "NocoReadRequest", "NocoSchema"]
