using System;
using System.Runtime;
using System.Runtime.Serialization;

namespace fbblEntiPubblici
{
    [Serializable]
    public class Ambasciata : Estero,IVisto,IIncorporato
    {
        private string _Capitale;
        private bool _Presidiato;
        private string _Nome;
        private string _Cognome;
        private string _Sesso;
        private string _Eta;
        private string _Indirizzo;
        private string _Citta;
        private string _TipoVisto;
        private string _DurataVisto;
        private string _NumeroUomini;
        private bool _Incorporato ;

        public Ambasciata
                        (
                          string _NomeEnte, 
                          string _TipoEnte, 
                          bool _Presidiato,
                          string _Nazione,
                          bool _Incorporato,
                          string _Capitale,
                          string _Nome,
                          string _Cognome,
                          string _Eta,
                          string _Sesso,
                          string _Indirizzo,
                          string _Citta,
                          string _TipoVisto,
                          string _DurataVisto
                        )
            :base(_NomeEnte,_TipoEnte,_Nazione)
        {
            this.Presidiato = _Presidiato;
            this.Incorporato = _Incorporato;
            this.Capitale = _Capitale;

            if(this.Incorporato)
            {
                this.Nome = _Nome;
                this.Cognome = _Cognome;
                this.Sesso = _Sesso;
                this.Eta = _Eta;
                this.Indirizzo = _Indirizzo;
                this.Citta = _Citta;
                this.TipoVisto = _TipoVisto;
                this.DurataVisto = _DurataVisto;
            }
            else
            {
                this.Nome = "N.A.";
                this.Cognome = "N.A.";
                this.Sesso = "N.A.";
                this.Eta = "N.A.";
                this.Indirizzo = "N.A.";
                this.Citta = "N.A.";
                this.TipoVisto = "N.A.";
                this.DurataVisto = "N.A.";
            }
        }       

        public Ambasciata(SerializationInfo info,StreamingContext context) : base(info,context)
        {
            this._Presidiato=info.GetBoolean("Presidiato");
            this._Capitale=info.GetString("Capitale");
            this._Incorporato=info.GetBoolean("Incorporato");
            this._Nome=info.GetString("Nome");
            this._Cognome=info.GetString("Cognome");
            this._Sesso=info.GetString("Sesso");
            this._Eta=info.GetString("Eta");
            this._Indirizzo=info.GetString("Indirizzo");
            this._Citta=info.GetString("Citta");
            this._TipoVisto=info.GetString ("TipoVisto");
            this._DurataVisto=info.GetString ("DurataVisto");
            this._NumeroUomini = info.GetString("NumeroUomini");
        }

        public string Nome
        {
            set
            {
                this._Nome = value;
            }

            get
            {
                return this._Nome;
            }
        }

        public string Cognome
        {
            set
            {
                this._Cognome = value;
            }

            get
            {
                return this._Cognome;
            }
        }

        public string Sesso
        {
            set
            {
                this._Sesso = value;
            }

            get
            {
                return this._Sesso;
            }
        }

        public string Eta
        {
            set
            {
                this._Eta = value;
            }

            get
            {
                return this._Eta;
            }
        }

        public string Indirizzo
        {
            set
            {
                this._Indirizzo = value;
            }

            get
            {
                return this._Indirizzo;
            }
        }

        public string Citta
        {
            set
            {
                this._Citta = value;
            }

            get
            {
                return this._Citta;
            }
        }

        public string TipoVisto
        {
            set
            {
                this._TipoVisto = value;
            }

            get
            {
                return this._TipoVisto;
            }
        }

        public string DurataVisto
        {
            set
            {
                this._DurataVisto = value;
            }

            get
            {
                return this._DurataVisto;
            }
        }

        public string Capitale
        {
            set
            {
                this._Capitale = value;
            }

            get
            {
                return this._Capitale;
            }
        }

        public string NumeroUomini
        {
            set
            {
                this._NumeroUomini = value;
            }

            get
            {
                return this._NumeroUomini;
            }
        }

        public bool Incorporato
        {
            set
            {
                this._Incorporato = value;
            }

            get
            {
                return this._Incorporato;
            }
        }

        override public bool Presidiato
        {
            set
            {
                this._Presidiato = value;

                if (value)
                {
                    if (
                          (this.Nazione.Equals("Russia") == true) ||
                          (this.Nazione.Equals("Cina") == true) ||
                          (this.Nazione.Equals("Brasile") == true) ||
                          (this.Nazione.Equals("USA") == true) ||
                          (this.Nazione.Equals("Giappone") == true) ||
                          (this.Nazione.Equals("Canada") == true)
                       )
                    {
                        this._NumeroUomini = "Unità massime: 10";
                    }
                    else
                    {
                        this._NumeroUomini = "Unità massime: secondo disponibilità";
                    }
                }

            }

            get
            {
                return this._Presidiato;
            }
        }

        public override void GetObjectData(SerializationInfo info,StreamingContext context)
        {
            info.AddValue("NomeEnte",this._NomeEnte,typeof(string));
            info.AddValue("TipoEnte",this._TipoEnte,typeof(string));
            info.AddValue("Nazione",this._Nazione,typeof(string));
            info.AddValue("Presidiato",this._Presidiato,typeof(bool));
            info.AddValue("Capitale",this._Capitale,typeof(string));
            info.AddValue("Incorporato",this._Incorporato,typeof(bool));
            info.AddValue("Nome",this._Nome,typeof(string));
            info.AddValue("Cognome",this._Cognome,typeof(string));
            info.AddValue("Sesso",this._Sesso,typeof(string));
            info.AddValue("Eta",this._Eta,typeof(string));
            info.AddValue("Indirizzo",this._Indirizzo,typeof(string));
            info.AddValue("Citta",this._Citta,typeof(string));
            info.AddValue("TipoVisto",this._TipoVisto,typeof(string));
            info.AddValue("DurataVisto",this._DurataVisto,typeof(string));
            info.AddValue("NumeroUomini", this._NumeroUomini, typeof(string));
        }


    }
}
