// Perro.cs
// Version 1.0
// Fecha: 6-Enero-2003
// Autor: Juan Manuel Cueva Lovelle
// Ejemplo de encapsulación


using System;

namespace Mascota
{
    /// <summary>
    /// Modelado básico de la clase Perro
    /// </summary>
    class Perro
    {
        protected string nombre="Sin nombre";
        //Propiedad Nombre
        public string Nombre
        {
            set {nombre=value;}
            get {return nombre;}
        }

        protected string raza="Sin raza";
        //Propiedad Raza
        public string Raza
        {
            set {raza=value;}
            get {return raza;}
        }

        protected int codigo;
        protected static int contador=0;

        // Propiedad Edad
        protected int edad=0;

        public int Edad
        {
            set
            {
                if (value>=0)
                    edad=value;
                else
                    Console.WriteLine("Edad no válida");
            }
            get{return edad;}
        }

        //Sobrecarga de constructores
        public Perro()
        {
            codigo=contador++;
            Console.WriteLine("Ha nacido el perro "+nombre);
        }

        public Perro(string nombre)
        {
            this.nombre=nombre;
            codigo=contador++;
            Console.WriteLine("Ha nacido el perro "+nombre);
        }

        public Perro(string nombre, string raza)
        {
            this.nombre=nombre;
            this.raza=raza;
            codigo=contador++;
            Console.WriteLine("Ha nacido el perro "+nombre+
                " y de raza "+raza);
        }

        public static int VerContador()
        {
            return contador;
        }

        public void Ladra()
        {
            Console.WriteLine(nombre+" dice guau ...");
        }

        public override string ToString()
        {
            return ("Perro:"+nombre+" Raza:"+raza+" Codigo:"+codigo+" Edad:"+edad);
        }

        /// <summary>
        /// El método Main contiene la prueba unitaria de la clase perro
        /// </summary>
        [STAThread]
        static void Main(string[] args)
        {
            Perro callejero = new Perro();
            Perro pancho=new Perro("Pancho");
            Perro tom= new Perro("Tom","Pointer");

            callejero.Nombre="Ron";
            callejero.Raza="Mastín";
            callejero.Edad=2;
            callejero.Ladra();

            Console.WriteLine("Dime lo que sabes de ... "+callejero);
            Console.WriteLine("Dime lo que sabes de ... "+pancho);
            Console.WriteLine("Dime lo que sabes de ... "+tom);

            //Ejemplo de llamada a método estático
            Console.WriteLine("Los perros creados son "+Perro.VerContador());

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