"""C2 VPR — Public API (AZ-336).

Per ``vpr_strategy_protocol.md`` v1.0.0 the public surface consists
of:

- :class:`VprStrategy` Protocol (3 methods).
- DTOs re-exported from :mod:`gps_denied_onboard._types.vpr` (the L1
  home for cross-component DTOs): :class:`VprQuery`,
  :class:`VprCandidate`, :class:`VprResult`.
- Error family rooted at :class:`VprError`; three documented
  subtypes (:class:`VprBackboneError`, :class:`VprPreprocessError`,
  :class:`IndexUnavailableError`).
- Config block :class:`C2VprConfig` (registered on import).

:class:`BackbonePreprocessor` is C2-internal (see
``components/02_c2_vpr/description.md`` § 6) and intentionally NOT
re-exported.

Concrete strategies (``UltraVprStrategy``, ``NetVladStrategy``,
``MegaLocStrategy``, ``MixVprStrategy``, ``SelaVprStrategy``,
``EigenPlacesStrategy``, ``SaladStrategy``) live in sibling modules
and are imported lazily by
:mod:`gps_denied_onboard.runtime_root.vpr_factory` — Risk-2
mitigation: this ``__init__.py`` MUST NOT import any concrete
strategy module.
"""

from gps_denied_onboard._types.vpr import VprCandidate, VprQuery, VprResult
from gps_denied_onboard.components.c2_vpr.config import C2VprConfig
from gps_denied_onboard.components.c2_vpr.errors import (
    IndexUnavailableError,
    VprBackboneError,
    VprError,
    VprPreprocessError,
)
from gps_denied_onboard.components.c2_vpr.interface import VprStrategy
from gps_denied_onboard.config.schema import register_component_block

register_component_block("c2_vpr", C2VprConfig)

__all__ = [
    "C2VprConfig",
    "IndexUnavailableError",
    "VprBackboneError",
    "VprCandidate",
    "VprError",
    "VprPreprocessError",
    "VprQuery",
    "VprResult",
    "VprStrategy",
]
