using System;

namespace DemoTestsUnitaires
{
    /// <summary>
    /// Représente un thermostat permettant de contrôler une température
    /// dans un intervalle défini.
    /// </summary>
    public class Thermostat
    {
        /// <summary>
        /// Température minimale autorisée.
        /// </summary>
        public const int TEMP_MIN = 5;

        /// <summary>
        /// Température maximale autorisée.
        /// </summary>
        public const int TEMP_MAX = 35;

        /// <summary>
        /// Température par défaut lors de la création du thermostat.
        /// </summary>
        public const int TEMP_PAR_DEFAUT = 20;

        // Champ privé qui stocke la température actuelle
        private int m_temperature;

        /// <summary>
        /// Obtient la température actuelle du thermostat.
        /// La modification se fait uniquement via les méthodes de la classe.
        /// </summary>
        /// <exception cref="ArgumentOutOfRangeException">
        /// Lancée si la température assignée est en dehors des limites autorisées.
        /// </exception>
        public int Temperature
        {
            get { return m_temperature; }
            private set
            {
                // Validation : température trop élevée
                if (value > TEMP_MAX)
                {
                    throw new ArgumentOutOfRangeException($"La température ne peut pas dépasser {TEMP_MAX}.");
                }
                
                // Affectation si valide
                m_temperature = value;
            }
        }

        /// <summary>
        /// Initialise un nouveau thermostat avec la température par défaut.
        /// </summary>
        public Thermostat()
        {
            Temperature = TEMP_PAR_DEFAUT;
        }

        /// <summary>
        /// Initialise un thermostat avec une température spécifique.
        /// </summary>
        /// <param name="pTemperatureInitiale">Température initiale souhaitée</param>
        /// <exception cref="ArgumentOutOfRangeException">
        /// Lancée si la température initiale est en dehors des limites autorisées.
        /// </exception>
        public Thermostat(int pTemperatureInitiale)
        {
            Temperature = pTemperatureInitiale;
        }

        /// <summary>
        /// Augmente la température de 1 degré.
        /// </summary>
        /// <exception cref="ArgumentOutOfRangeException">
        /// Lancée si l'augmentation dépasse la température maximale.
        /// </exception>
        public void AugmenterTemperature()
        {
            Temperature++;
        }

        /// <summary>
        /// Diminue la température de 1 degré.
        /// </summary>
        /// <exception cref="ArgumentOutOfRangeException">
        /// Lancée si la diminution passe sous la température minimale.
        /// </exception>
        public void DiminuerTemperature()
        {
            Temperature-=2;
        }
    }
}