// ----------------------------------------------------------------------------------------------------------------------------------------

        // Constructor:
        // Read the values from the configuration file and set them in the variables
        public SpeechRecognition()
        {
            RecognitionLanguage      = ConfigurationManager.AppSettings["RecognitionLanguage"];
            LuisEndpointURL          = ConfigurationManager.AppSettings["LuisEndpointURL"];
            SpeechAPISubscriptionKey = ConfigurationManager.AppSettings["SpeechAPISubscriptionKey"];
            AuthorizationToken       = new Authentication();
            CreateMicrophoneRecoClientWithIntent();


            Board = new Board("Paché", 6, 5, 5);
            Board.Show();
            MainFrame = new principalWindown(Board);
            MainFrame.ShowDialog();
        }
        // ----------------------------------------------------------------------------------------------------------------------------------------

        // Handles the InputParameters entity
        public void InputParametersHandler(List <Entity> Entities)
        {
            string ObjectiveText = "";
            string Decimal       = "@";

            // Extract the entities
            foreach (Entity entity in Entities)
            {
                switch (entity.type)
                {
                case "objetivo":
                    ObjectiveText = entity.entity;
                    break;

                case "igual":
                    Decimal = entity.entity;
                    break;
                }
            }

            bool result = false;

            switch (ObjectiveText)
            {
            // Change agent's position
            case "crear tablero":
                if (m > 0 && n > 0 && a > 0)
                {
                    Board = new Board("Pache", m, n, a);
                    MainFrame.DisposeFrame();
                    MainFrame = new principalWindown(Board);
                    TextToSpeech("Tablero de " + m + " por " + n + " con cuadrículas de tamaño " + a + "creado!");
                    MainFrame.ShowDialog();
                }
                else
                {
                    string ErrorMessage = "Me falta conocer ";
                    if (m == -1)
                    {
                        ErrorMessage += "el largo";
                    }
                    if (n == -1)
                    {
                        ErrorMessage += "el ancho";
                    }
                    if (a == -1)
                    {
                        ErrorMessage += "el tamaño de cada cuadrícula";
                    }
                    TextToSpeech(ErrorMessage + " para poder construirlo.");
                }
                break;

            case "tamaño":
                result = Int32.TryParse(Regex.Match(Decimal, @"\d+").Value, out a);
                if (!result || a == 0)
                {
                    a = -1;
                }
                else
                {
                    TextToSpeech("Listo.Ahora el tamaño de cada cuadícula es de ." + a);
                }
                break;

            case "largo":
                result = Int32.TryParse(Regex.Match(Decimal, @"\d+").Value, out m);
                if (!result || m == 0)
                {
                    m = -1;
                }
                else
                {
                    TextToSpeech("Listo.Ahora el largo es de ." + m);
                }
                break;

            case "ancho":
                result = Int32.TryParse(Regex.Match(Decimal, @"\d+").Value, out n);
                if (!result || n == 0)
                {
                    a = -1;
                }
                else
                {
                    TextToSpeech("Listo.Ahora el ancho es de ." + n);
                }
                break;

            case "mejor ruta":
                if (Board.ShortestPath() == null)
                {
                    TextToSpeech("Rayos, estoy encerrado. No hay ruta a la meta fijada!");
                }
                else
                {
                    TextToSpeech("¡Hostia, llegamos a la meta!");
                }
                MainFrame.DrawBestPath();
                break;

            case "limpiar tablero":
                MainFrame.CleanPath();
                break;

            case "cambiar diagonal":
                if (Board.IsDiagonal)
                {
                    Board.IsDiagonal = false;
                    TextToSpeech("¿Qué demonios? La tienes contra mí?.");
                }
                else
                {
                    Board.IsDiagonal = true;
                    TextToSpeech("Bien! Ahora me será más fácil llegar a la meta.");
                }
                break;
            }

            Board.Show();
        }