"""Core data model for AR-Autopilot.

This module exports the typed, validated Pydantic v2 models used across
the Studio, the firmware build pipeline, and the test bench.

Public surface (Sprint 0):

- :mod:`~arautopilot.core.ids`             — typed identifier wrappers
- :mod:`~arautopilot.core.modes`           — autopilot operating modes
- :mod:`~arautopilot.core.alarms`          — alarm types and severities
- :mod:`~arautopilot.core.actuator_config` — rudder actuator configuration
- :mod:`~arautopilot.core.pid_config`      — cascaded PID + gain schedule
- :mod:`~arautopilot.core.vessel_config`   — vessel + composed configs
- :mod:`~arautopilot.core.knob_state`      — bridge knob arming state machine
- :mod:`~arautopilot.core.project_config`  — root project config (root entity)
"""

from arautopilot.core.actuator_config import (
    ActuatorConfig,
    ActuatorType,
)
from arautopilot.core.alarms import (
    Alarm,
    AlarmSeverity,
    AlarmType,
)
from arautopilot.core.ids import (
    ProjectId,
    VesselId,
    new_project_id,
    new_vessel_id,
)
from arautopilot.core.knob_state import (
    KnobFunction,
    KnobMode,
    KnobState,
)
from arautopilot.core.modes import (
    AutopilotMode,
    is_available_in_phase,
)
from arautopilot.core.pid_config import (
    AccessLevel,
    GainSchedulePoint,
    PidConfig,
    PidGains,
    interpolate_gains,
)
from arautopilot.core.project_config import (
    ProjectConfig,
)
from arautopilot.core.vessel_config import (
    VesselConfig,
    VesselType,
)

__all__ = [
    # ids
    "ProjectId",
    "VesselId",
    "new_project_id",
    "new_vessel_id",
    # modes
    "AutopilotMode",
    "is_available_in_phase",
    # alarms
    "AlarmType",
    "AlarmSeverity",
    "Alarm",
    # actuator
    "ActuatorType",
    "ActuatorConfig",
    # pid
    "AccessLevel",
    "PidGains",
    "GainSchedulePoint",
    "PidConfig",
    "interpolate_gains",
    # vessel
    "VesselType",
    "VesselConfig",
    # knob
    "KnobMode",
    "KnobFunction",
    "KnobState",
    # project
    "ProjectConfig",
]
