using System.Runtime;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
using System;

namespace fbblEntiPubblici
{
    
    //Set this attribute to all the classes that want to serialize
    [Serializable]
    public class Ambasciata : Estero,IIncorporato,IVisto,ISerializable
    {
        
        private string _Denominazione;
        private string _TipoEnte;
        private bool _Presidiato;
        private string _Nazione;
        private string _Capitale;
        private bool _Incorporato;
        private string _Nome;
        private string _Cognome;
        private string _Sesso;
        private string _Eta;
        private string _Indirizzo;
        private string _Citta;
        private string _TipoVisto;
        private string _DurataVisto;

        public void GetObjectData(SerializationInfo info, StreamingContext context)
        {
            info.AddValue("Denominazione", this._Denominazione, typeof(string));
            info.AddValue("TipoEnte", this._TipoEnte, typeof(string));
            info.AddValue("Presidiato", this._Presidiato, typeof(bool));
            info.AddValue("Nazione", this._Nazione, typeof(string));
            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));
        }

        public Ambasciata(SerializationInfo info, StreamingContext context)
        {
            this._Denominazione = info.GetString("Denominazione");
            this._TipoEnte = info.GetString("TipoEnte");
            this._Presidiato = info.GetBoolean("Presidiato");
            this._Nazione = info.GetString("Nazione");
            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");
        }




        public Ambasciata(string _Denominazione, string _TipoEnte, bool _Presidiato,
                          string _Nazione,bool _Incorporato,string _Capitale,
                          string _Nome,string _Cognome,string _Sesso,string _Eta,
                          string _Indirizzo,string _Citta,string _TipoVisto, string _DurataVisto
                         )
        {
            NomeEnte = _Denominazione;
            TipoEnte = _TipoEnte;
            Presidiato = _Presidiato;
            Nazione = _Nazione;
            Incorporato = _Incorporato;
            Capitale = _Capitale;

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

        }

        public string Nome
        {
            set
            {
                _Nome = value;
            }

            get
            {
                return this._Nome;
            }
        }

        public string Cognome
        {
            set
            {
                _Cognome = value;
            }

            get
            {
                return this._Cognome;
            }
        }

        public string Sesso
        {
            set
            {
                _Sesso = value;
            }

            get
            {
                return this._Sesso;
            }
        }

        public string Eta
        {
            set
            {
                _Eta = value;
            }

            get
            {
                return this._Eta;
            }
        }

        public string Indirizzo
        {
            set
            {
                _Indirizzo = value;
            }

            get
            {
                return this._Indirizzo;
            }
        }

        public string Citta
        {
            set
            {
                _Citta = value;
            }

            get
            {
                return this._Citta;
            }
        }

        public string TipoVisto
        {
            set
            {
                _TipoVisto = value;
            }

            get
            {
                return this._TipoVisto;
            }
        }

        public string DurataVisto
        {
            set
            {
                _DurataVisto = value;
            }

            get
            {
                return this._DurataVisto;
            }
        }

        override public string NomeEnte
        {
            set
            {
                _Denominazione = value;
            }

            get
            {
                return this._Denominazione;
            }
        }

        override public string TipoEnte
        {
            set
            {
                _TipoEnte = value;
            }

            get
            {
                return this._TipoEnte;
            }
        }

        override public bool Presidiato
        {
            set
            {
                _Presidiato = value;
            }

            get
            {
                return this._Presidiato;
            }
        }

        override public string Nazione
        {
            set
            {
                _Nazione = value;
            }

            get
            {
                return this._Nazione;
            }
        }

        public string Capitale
        {
            set
            {
                _Capitale = value;
            }

            get
            {
                return this._Capitale;
            }
        }

        public bool Incorporato
        {
            set
            {
                _Incorporato = value;
            }

            get
            {
                return this._Incorporato;
            }
        }


    }
}
