//! # Rill Patchbay — Маршрутизация событий и автоматизация
//!
//! `rill-patchbay` является эволюцией `rill-automation` из версии 0.2.0,
//! объединённой с функциональностью маппинга из `rill-control`.
//!
//! ## Основные компоненты
//!
//! - **Автоматы** — генеративные источники сигналов (LFO, огибающие, секвенсоры)
//! - **Сервоприводы** — связь автоматов с параметрами узлов
//! - **Маппинги** — связь внешних событий (MIDI/OSC) с параметрами
//! - **Сенсоры** — источники событий из внешнего мира
//! - **Менеджер** — центральный координатор для двухпоточной архитектуры
//!
//! ## Архитектура
//!
//! ```text
//! ┌─────────────────────────────────────────────────────────────┐
//! │                     ПОТОК УПРАВЛЕНИЯ                         │
//! │                                                              │
//! │  ┌─────────────────────────────────────────────────────┐   │
//! │  │               PatchbayManager                         │   │
//! │  │  ┌────────────┐  ┌────────────┐  ┌────────────┐     │   │
//! │  │  │  Automata  │  │  Servos    │  │  Mappings  │     │   │
//! │  │  └────────────┘  └────────────┘  └────────────┘     │   │
//! │  │                    │                │                │   │
//! │  │                    ▼                ▼                │   │
//! │  │              ┌──────────────────────────┐           │   │
//! │  │              │   RtQueue<ParameterCommand>│         │   │
//! │  │              └──────────────────────────┘           │   │
//! │  └─────────────────────────────────────────────────────┘   │
//! │                              │                               │
//! │                              │ неблокирующая очередь         │
//! │                              ▼                               │
//! │  ┌─────────────────────────────────────────────────────┐   │
//! │  │                  АУДИОПОТОК                          │   │
//! │  │              (rill-graph / rill-io)                  │   │
//! │  └─────────────────────────────────────────────────────┘   │
//! └─────────────────────────────────────────────────────────────┘
//! ```

#![warn(missing_docs)]
#![deny(unsafe_code)]

// =============================================================================
// Внешние зависимости
// =============================================================================

// Реэкспорты из rill-core
pub use rill_core::prelude::*;
pub use rill_core::queues::RtQueue;
pub use rill_core::{NodeId, ParamValue, ParameterId, PortId};

// =============================================================================
// Публичные модули
// =============================================================================

/// Автоматы — генеративные источники управления
pub mod automaton;

/// Управление и маппинг событий
pub mod control;

/// Менеджер патчбэя — центральный координатор
pub mod manager;

/// Сенсоры — источники событий из внешнего мира
pub mod sensor;

/// Утилиты и вспомогательные функции
pub mod utils;

// =============================================================================
// Реэкспорты для удобства
// =============================================================================

// Selective re-exports
pub use automaton::{
    EnvelopeAutomaton, EnvelopeStage, EnvelopeType, FunctionAutomaton, LfoAutomaton, LfoWaveform,
    PlayMode, Range, SequencerAutomaton, StatefulFunctionAutomaton, Step, SyncMode,
};
pub use control::{
    midi_cc, osc_address, AnyServo, Automaton, BoxedServo, ControlEvent, EventPattern, Mapping,
    NoAction, ParameterCommand, ParameterMapping, PatchbayControl, Servo, Target, Transform,
};
pub use manager::PatchbayManager;

// =============================================================================
// Прелюдия для удобного импорта
// =============================================================================

/// Прелюдия для удобного импорта основных типов
pub mod prelude {
    // Основные типы
    pub use crate::automaton::*;
    pub use crate::control::*;
    pub use crate::manager::*;
    pub use crate::utils::*;

    // Реэкспорты из rill-core
    pub use rill_core::prelude::*;
    pub use rill_core::queues::RtQueue;
    pub use rill_core::{NodeId, ParameterId, PortId};
}

// =============================================================================
// Тесты
// =============================================================================

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test_basic_imports() {
        // Просто проверяем, что всё импортируется
        let _ = automaton::LfoWaveform::Sine;
        let _ = control::Transform::Linear;
        let _ = manager::PatchbayConfig::default();
    }
}
