namespace GMLL00ImportadorXsd.Utilidades.Localizacion
{
    using System;
    using System.Globalization;
    using System.Threading;

    public sealed class Localizador
    {
        private static Localizador instance;

        public const string NombreCulturaEspaniol = "es-ES";
        public const string NombreCulturaEuskera = "eu-ES";

        public event EventHandler CulturaChanged;

        public static Localizador Instance
        {
            get
            {
                if (instance == null)
                {
                    instance = new Localizador();
                }

                return instance;
            }
        }

        public string NombreCultura
        {
            get
            {
                return Thread.CurrentThread.CurrentCulture.Name;
            }

            set
            {
                this.SetCultura(value);
            }
        }

        private void OnCulturaChanged(EventArgs e)
        {
            if (this.CulturaChanged != null)
            {
                this.CulturaChanged(this, e);
            }
        }

        private void SetCultura(string nombreCultura)
        {
            /*
             * Obtenemos la cultura actual.
             */
            var nombreCulturaActual = Thread.CurrentThread.CurrentCulture.Name;

            /*
             * Calculamos si el nuevo nombre de cultura es distinto al actual.
             */
            var cambioDeCultura = nombreCultura != nombreCulturaActual;

            if (cambioDeCultura)
            {
                /*
                 * Establecemos la nueva cultura.
                 */
                Thread.CurrentThread.CurrentCulture = Thread.CurrentThread.CurrentUICulture = new CultureInfo(nombreCultura);

                /*
                 * Avisamos del cambio de cultura a todos los suscriptores.
                 */
                this.OnCulturaChanged(EventArgs.Empty);
            }
        }
    }
}