use bevy::prelude::*;

/// Marker for the player-controlled ship. There should be exactly one in any playable scene.
#[derive(Component, Default)]
pub struct Player;

/// Linear velocity in world space (units/sec).
#[derive(Component, Default, Debug, Clone, Copy)]
pub struct Velocity(pub Vec3);

/// Maximum speed cap. Velocity magnitude will not exceed this.
#[derive(Component, Debug, Clone, Copy)]
pub struct MaxSpeed(pub f32);

impl Default for MaxSpeed {
    fn default() -> Self {
        Self(60.0)
    }
}

/// Maximum rotation rate in radians per second. Used to smooth heading changes.
#[derive(Component, Debug, Clone, Copy)]
pub struct TurnRate(pub f32);

impl Default for TurnRate {
    fn default() -> Self {
        Self(3.0)
    }
}

/// Exponential drag coefficient. Higher = stronger drag (slower drift when no thrust).
/// Currently unused by click-to-move; reserved for future throttle-based input.
#[derive(Component, Default, Debug, Clone, Copy)]
pub struct Drag(pub f32);

/// A world-space point the entity should move toward.
/// Set by input systems (e.g. click-to-move) and consumed by kinematic systems.
#[derive(Component, Default, Debug, Clone, Copy)]
pub struct MoveTarget(pub Vec3);
