//! # RenderingControl Service - Service de contrôle du rendu audio UPnP
//!
//! Ce module implémente le service RenderingControl:1 selon la spécification UPnP AV.
//! Le service RenderingControl permet de contrôler les paramètres de rendu audio
//! (volume, mute, etc.) sur un MediaRenderer.
//!
//! ## Fonctionnalités
//!
//! Le service RenderingControl permet :
//! - **Contrôle du volume** : GetVolume, SetVolume
//! - **Contrôle du mute** : GetMute, SetMute
//! - Support multi-canal (Master, LF, RF)
//!
//! ## Conformité UPnP
//!
//! Cette implémentation suit la spécification **UPnP RenderingControl:1 Service Template**.
//! Toutes les actions obligatoires (Required) sont implémentées :
//!
//! - ✅ GetVolume
//! - ✅ SetVolume
//! - ✅ GetMute
//! - ✅ SetMute
//!
//! ## Variables d'état
//!
//! Le service expose les variables d'état conformes à la spécification :
//!
//! ### Contrôle audio
//! - [`VOLUME`] : Niveau de volume (0-100)
//! - [`MUTE`] : État mute (true/false)
//!
//! ### Arguments
//! - [`A_ARG_TYPE_INSTANCE_ID`] : ID d'instance
//! - [`A_ARG_TYPE_CHANNEL`] : Canal audio (Master, LF, RF)
//!
//! ## Examples
//!
//! ```rust
//! use pmoupnp::mediarenderer::renderingcontrol::RENDERINGCONTROL;
//!
//! // Accéder au service
//! let service = &*RENDERINGCONTROL;
//! println!("Service: {}", service.name());
//! println!("Type: {}", service.service_type());
//! ```
//!
//! ## Références
//!
//! - [UPnP RenderingControl:1 Service Template](https://upnp.org/specs/av/UPnP-av-RenderingControl-v1-Service.pdf)
//! - [UPnP AV Architecture](https://upnp.org/specs/av/)

use pmoupnp::define_service;

pub mod actions;
pub mod variables;

use actions::{GETMUTE, GETVOLUME, SETMUTE, SETVOLUME};
use variables::{A_ARG_TYPE_CHANNEL, A_ARG_TYPE_INSTANCE_ID, MUTE, VOLUME};

// Service RenderingControl:1 conforme à la spécification UPnP AV pour MediaRenderer audio
// Voir la documentation du module pour plus de détails
define_service! {
    pub static RENDERINGCONTROL = "RenderingControl" {
        variables: [
            A_ARG_TYPE_CHANNEL,
            A_ARG_TYPE_INSTANCE_ID,
            MUTE,
            VOLUME,
        ],
        actions: [
            GETMUTE,
            GETVOLUME,
            SETMUTE,
            SETVOLUME,
        ]
    }
}
