using System;
using System.Globalization;
using System.Threading;

namespace GMLC01HerramientasCad.Logica
{
    /// <summary>
    /// Implementa la traducción
    /// </summary>
    public sealed class Localizador
    {
        private static bool iPrimeraVez = true;

        private static Localizador instance;
        /// <summary>
        /// 
        /// </summary>
        public const string NombreCulturaEspaniol = "es-ES";
        /// <summary>
        /// 
        /// </summary>
        public const string NombreCulturaEuskera = "eu-ES";

        /// <summary>
        /// 
        /// </summary>
        public event EventHandler CulturaChanged;

        /// <summary>
        /// 
        /// </summary>
        public static Localizador Instance
        {
            get
            {
                if (instance == null)
                    instance = new Localizador();
                else
                    iPrimeraVez = false;

                return instance;
            }
        }

        /// <summary>
        /// 
        /// </summary>
        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 (iPrimeraVez || cambioDeCultura)
            {
                /*
                 * Establecemos la nueva cultura.
                 */
                Thread.CurrentThread.CurrentCulture = Thread.CurrentThread.CurrentUICulture = new CultureInfo(nombreCultura);

                Properties.Resources.Culture = Thread.CurrentThread.CurrentCulture;
                /*
                 * Avisamos del cambio de cultura a todos los suscriptores.
                 */
                this.OnCulturaChanged(EventArgs.Empty);
            }
        }
    }
}
