"""C4 PoseEstimator component — public API (AZ-355 / E-C4).

Per the C4 contract (``state_estimator_protocol.md`` v1.0.0), the
public surface consists of:

* :class:`PoseEstimator` Protocol
* :class:`PoseEstimate` DTO + :class:`LatLonAlt` + :class:`Quat`
  (re-exported from ``_types.pose``)
* :class:`CovarianceMode` + :class:`PoseSourceLabel` enums
* Error hierarchy: :class:`PoseEstimatorError` + subclasses +
  :class:`CovarianceDegradedWarning`
* :class:`C4PoseConfig` config block (registered on import)

The ``ISam2GraphHandle`` Protocol stub lives in the private
``_isam2_handle`` module — the composition root imports it directly;
it is intentionally NOT part of the public surface to discourage
non-runtime-root callers from poking at C5's internals.
"""

from gps_denied_onboard._types.pose import (
    CovarianceMode,
    LatLonAlt,
    PoseEstimate,
    PoseSourceLabel,
    Quat,
)
from gps_denied_onboard.components.c4_pose.config import C4PoseConfig
from gps_denied_onboard.components.c4_pose.errors import (
    CovarianceDegradedWarning,
    PnpFailureError,
    PoseEstimatorConfigError,
    PoseEstimatorError,
)
from gps_denied_onboard.components.c4_pose.interface import PoseEstimator
from gps_denied_onboard.config.schema import register_component_block

__all__ = [
    "C4PoseConfig",
    "CovarianceDegradedWarning",
    "CovarianceMode",
    "LatLonAlt",
    "PnpFailureError",
    "PoseEstimate",
    "PoseEstimator",
    "PoseEstimatorConfigError",
    "PoseEstimatorError",
    "PoseSourceLabel",
    "Quat",
]


register_component_block("c4_pose", C4PoseConfig)
