//! # pmoplaylist - Gestionnaire centralisé de playlists FIFO multi-consommateurs
//!
//! Cette crate fournit un gestionnaire centralisé de playlists avec :
//! - Gestion FIFO avec capacité et TTL configurables
//! - Multi-consommateurs indépendants
//! - Persistance optionnelle (SQLite)
//! - Intégration avec pmoaudiocache
//! - Génération DIDL-Lite pour UPnP
//!
//! # Architecture
//!
//! - **PlaylistManager** : Singleton central gérant toutes les playlists
//! - **WriteHandle** : Accès exclusif en écriture (push, flush, delete)
//! - **ReadHandle** : Accès en lecture avec curseur individuel (pop, peek)
//! - **PlaylistTrack** : Référence minimale vers pmoaudiocache
//!
//! # Exemple d'utilisation
//!
//! ```no_run
//! use pmoplaylist::PlaylistManager;
//!
//! # #[tokio::main]
//! # async fn main() -> pmoplaylist::Result<()> {
//! // Obtenir le gestionnaire (init automatique avec pmoconfig)
//! let manager = PlaylistManager();
//!
//! // Créer une playlist persistante
//! let mut writer = manager.create_persistent_playlist("radio-paradise".into())?;
//! writer.set_title("Radio Paradise - Main Mix".into()).await?;
//!
//! // Ajouter des morceaux (par cache_pk)
//! writer.push("abc123".into()).await?;
//! writer.push("def456".into()).await?;
//!
//! // Créer un consommateur
//! let mut reader = manager.get_read_handle("radio-paradise")?;
//!
//! // Consommer
//! while let Some(track) = reader.pop().await? {
//!     let path = track.file_path()?;
//!     println!("Playing: {:?}", path);
//! }
//! # Ok(())
//! # }
//! ```

#[cfg(feature = "pmoserver")]
pub mod api;
mod error;
mod handle;
mod manager;
#[cfg(feature = "pmoserver")]
pub mod openapi;
mod persistence;
mod playlist;
#[cfg(feature = "pmoserver")]
mod sse;
mod track;

#[cfg(feature = "pmoconfig")]
mod config_ext;

// Réexports publics
#[cfg(feature = "pmoserver")]
pub use api::playlist_api_router;
pub use error::{Error, Result};
pub use handle::{ReadHandle, WriteHandle};
pub use manager::{register_audio_cache, PlaylistManager, PlaylistManager as Manager};
pub use manager::{subscribe_events, PlaylistEvent, PlaylistEventEnvelope, PlaylistEventKind};
pub use playlist::PlaylistRole;
#[cfg(feature = "pmoserver")]
pub use sse::playlist_events_router;
pub use track::PlaylistTrack;

#[cfg(feature = "pmoconfig")]
pub use config_ext::PlaylistConfigExt;
