//! Wire types for capabilities the server documents ahead of their
//! providers.
//!
//! [`aerocontext_core::OwnshipStatusProvider`] and
//! [`aerocontext_core::ControlCommandProvider`] are capability traits
//! with no implementation yet, so the matching `ownship_status` and
//! `submit_command` tools are not registered: they appear in the server
//! instructions as planned capabilities but stay out of `tools/list`.
//! These parameter/result shapes pin the wire contract now; when a
//! provider lands, each pair becomes a `#[tool]` on
//! [`crate::AeroContextServer`] without changing shape.
//!
//! Every type mirrors its aerocontext-core counterpart, which today is a
//! `#[non_exhaustive]` placeholder — fields arrive on both sides
//! together, additively.

use schemars::JsonSchema;
use serde::{Deserialize, Serialize};

/// Parameters of the planned `ownship_status` tool.
///
/// Mirrors the (parameterless) fetch on
/// [`aerocontext_core::OwnshipStatusProvider::ownship_status`]; carries
/// no fields until a telemetry provider defines selectors.
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
pub struct OwnshipStatusParams {}

/// Result of the planned `ownship_status` tool.
///
/// Mirrors [`aerocontext_core::OwnshipStatus`] — live ownship state
/// (position, altitude, track, …) once a telemetry provider lands.
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct OwnshipStatusReport {}

/// Parameters of the planned `submit_command` tool.
///
/// Mirrors [`aerocontext_core::ControlCommand`] — a control command
/// directed at a provider (e.g. tasking a sensor).
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct SubmitCommandParams {}

/// Result of the planned `submit_command` tool.
///
/// Mirrors [`aerocontext_core::CommandAck`] — the provider's
/// acknowledgement of a submitted command.
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize, JsonSchema)]
pub struct SubmitCommandReport {}
