// ISensor.cs
// version 1.0
// fecha: 7-Enero-2003
// Juan Manuel Cueva Lovelle
// Ejemplo de Interfaces
// También se ilustra el tipo enumerado

#define DEPURACION

using System;

namespace Interfaces
{
    /// <summary>
    /// Declara las operaciones comunes de los sensores
    /// </summary>
    interface ISensor
    {
        void Encender();
        void Apagar();
        void Visualizar();
    }

    class Termometro:ISensor
    {
        protected bool estado=false;
        protected float medida;

        public Termometro()
        {
            estado=false;
            #if DEPURACION
            Console.WriteLine("Se ha creado un Termómetro");
            #endif
        }
        public void Visualizar()
        {
            if (estado) Console.WriteLine("Temperatura: {0:F2} grados Celsius",medida);
            else Console.WriteLine("Termómetro apagado");
        }
        public void Encender()
        {
            estado=true;
            Random aleatorio = new Random(); //Se inializa el generador de números aleatorios
            medida=(float)aleatorio.Next(-45,45);//Devuelve un número aleatorio en el intervalo
        }
        public void Apagar()
        {
            estado=false;
        }
    }
    /// <summary>
    /// Las veletas siempre están activas
    /// </summary>
    class Veleta:ISensor
    {
        protected bool estado=true;
        protected enum direccion {N,NE,E,SE,S,SW,W,NW};
        protected direccion medida;

        public Veleta()
        {
            estado=true;
            #if DEPURACION
                Console.WriteLine("Se ha creado una Veleta");
            #endif
        }
        public void Visualizar()
        {
            Random aleatorio = new Random(); //Se inializa el generador de números aleatorios
            int d = aleatorio.Next(7);//Devuelve un número aleatorio en el intervalo
            switch (d)
                    {
                        case 0: medida=direccion.N;
                                Console.WriteLine("Dirección del viento N");
                            break;
                        case 1: medida=direccion.NE;
                                Console.WriteLine("Dirección del viento NE");
                            break;
                        case 2: medida=direccion.E;
                                Console.WriteLine("Dirección del viento E");
                            break;
                        case 3: medida=direccion.SE;
                                Console.WriteLine("Dirección del viento SE");
                            break;
                        case 4: medida=direccion.S;
                                Console.WriteLine("Dirección del viento S");
                            break;
                        case 5: medida=direccion.SW;
                                Console.WriteLine("Dirección del viento SW");
                            break;
                        case 6: medida=direccion.W;
                                Console.WriteLine("Dirección del viento W");
                            break;
                        case 7: medida=direccion.NW;
                                Console.WriteLine("Dirección del viento NW");
                            break;
                    }

        }
        public void Encender()
        {
            estado=true;
            #if DEPURACION
            Console.WriteLine("Las Veletas siempre están activas");
            #endif

        }
        /// <summary>
        /// Las veletas no se pueden apagar
        /// </summary>
        public void Apagar()
        {
            estado=true;
            #if DEPURACION
                Console.WriteLine("Las Veletas siempre están activas");
            #endif
        }
        /// <summary>
        /// Punto de entrada principal de la aplicación.
        /// </summary>
        [STAThread]
        static void Main(string[] args)
        {
            Termometro t = new Termometro();
            t.Encender();
            t.Visualizar();
            t.Apagar();
            t.Visualizar();

            Veleta v = new Veleta();
            v.Encender();
            v.Visualizar();
            v.Apagar();
            v.Visualizar();

            //Espera una tecla
            Console.ReadLine();
        }
    }
}