//
// Autore: Giuliano Pellegrini Parisi
//
// Data: 4 dicembre 2008
//
// Classe: 4^Inf. Sirio
//
// Oggetto: Implementazione della classe Veicolo
//
// Release: 0.1

using System;

namespace CircolazioneStradale
{

    class Veicolo
    {
        private string NominativoGuidatore;
        private string ModelloVeicolo;
        private sbyte Velocita;   // sbyte è un tipo di dato a 8 bit
        private string Direzione;
        
        private const string DIRITTO = "diritto";
        private const string SINISTRA = "sinistra";
        private const string DESTRA = "destra";
        private const string INDIETRO = "indietro";

        // Elenco dei costruttori di classe

        public Veicolo()
        { 
        }

        public Veicolo(string ModelloVeicolo)
        {
            this.ModelloVeicolo = ModelloVeicolo;
        }

        public Veicolo(string ModelloVeicolo,string NominativoGuidatore) : this(ModelloVeicolo)
        {
            this.NominativoGuidatore = NominativoGuidatore;
        }

        // Elenco metodi Getter/Setter

        public void set_NominativoGuidatore(string NominativoGuidatore)
        {
            this.NominativoGuidatore = NominativoGuidatore;
        }

        public string get_NominativoGuidatore()
        {
            return this.NominativoGuidatore;
        }

        public void set_ModelloVeicolo(string ModelloVeicolo)
        {
            this.ModelloVeicolo = ModelloVeicolo;
        }

        public string get_ModelloVeicolo()
        {
            return this.ModelloVeicolo;
        }

        public void set_Velocita(sbyte Velocita)
        {
            this.Velocita = Velocita;
        }

        public sbyte get_Velocita()
        {
            return this.Velocita;
        }

        public void set_Direzione(string Direzione)
        {
            this.Direzione = Direzione;
        }

        public string get_Direzione()
        {
            return this.Direzione;
        }

        // Il metodo muovi è uno strumento POLIMORFICO o come si dice in inglese di tipo OVERLOAD perchè se non passate nessun
        // parametro in ingresso viene chiamato il metodo che imposta la velocità ad 1Km/h altrimenti viene chiamato il secondo
        // metodo che imposta una velocità personalizzata.


        public void muovi()
        {
            this.set_Velocita(1);

            Console.WriteLine("L'autovettura " + this.get_ModelloVeicolo() + " guidata da " + this.get_NominativoGuidatore() + "si muove ad 1Km/h");
        }

        public void muovi(sbyte Velocita)
        {
            this.set_Velocita(Velocita);

            Console.WriteLine("L'autovettura " + this.get_ModelloVeicolo() + " guidata da " + this.get_NominativoGuidatore() + "si muove alla velocità di " +  this.get_Velocita() + "Km/h");
        }

        public void ferma()
        {
            this.set_Velocita(0);

            Console.WriteLine("L'autovettura " + this.get_ModelloVeicolo() + " guidata da " + this.get_NominativoGuidatore() + "si ferma.");
        }


        public void sinistra()
        {
            this.set_Direzione(SINISTRA); // Le costanti non si puntano con l'operatore this.
            Console.WriteLine("L'autovettura " + this.get_ModelloVeicolo() + " guidata da " + this.get_NominativoGuidatore() + " sta svoltando a " + this.get_Direzione());
        }

        public void destra()
        {
            this.set_Direzione(DESTRA);
            Console.WriteLine("L'autovettura " + this.get_ModelloVeicolo() + " guidata da " + this.get_NominativoGuidatore() + " sta svoltando a " + this.get_Direzione());
        }

        public void diritto()
        {
            this.set_Direzione(DIRITTO);
            Console.WriteLine("L'autovettura " + this.get_ModelloVeicolo() + " guidata da " + this.get_NominativoGuidatore() + " sta procedendo " + this.get_Direzione());
        }

        public void retromarcia()
        {
            this.set_Direzione(INDIETRO);
            Console.WriteLine("L'autovettura " + this.get_ModelloVeicolo() + " guidata da " + this.get_NominativoGuidatore() + " sta andando in " + this.get_Direzione());
        }

    }

}
