/// <summary>
        /// Loads the Master Config XML file into an ConfigMasterParsed Object
        /// </summary>
        /// <param name="ConfigMasterFilename"></param>
        /// <returns></returns>
        public static ConfigMasterParsed LoadConfigMasterFile(string ConfigMasterFilename)
        {
            var CMO = new ConfigMasterParsed();

            var XMasterFile = XDocument.Load(ConfigMasterFilename);

            //// Load registered Environments
            //foreach (var env in XMasterFile.Root.Element("Environments").Elements("Environment"))
            //{
            //    CMO.ListOfEnvironments.Add(new Models.Environment()
            //    {
            //        Title = env.Attribute("Title").Value,
            //        Description = env.Attribute("Description").Value
            //    });
            //}

            //// Load registered Servers
            //foreach (var env in XMasterFile.Root.Element("Servers").Elements("Server"))
            //{
            //    CMO.ListOfServers.Add(new Models.Computer()
            //    {
            //        ComputerName = env.Attribute("ComputerName").Value,
            //        Description = env.Attribute("Description").Value
            //    });
            //}


            //// Load registered Components
            //foreach (var env in XMasterFile.Root.Element("Components").Elements("Component"))
            //{
            //    CMO.ListOfComponents.Add(new Models.Component()
            //    {
            //        Title = env.Attribute("Title").Value,
            //        Description = env.Attribute("Description").Value
            //    });
            //}

            // Load Recipe
            CMO.GlobalRecipe = new ConfigFileInstances();

            foreach (var env in XMasterFile.Root.Element("Recipes").Elements("Environment"))
            {

                foreach (var comp in env.Elements("Component"))
                {
                    
                    foreach (var svr in comp.Elements("Server"))
                    {

                        var newSvr = new ConfigFileInstances.ConfigFileInstance()
                        {
                            Environment = env.Attribute("Title").Value,
                            Component = comp.Attribute("Title").Value,
                            ComputerName = svr.Attribute("ComputerName").Value,
                            ConfigFilePath = svr.Attribute("ConfigFilePath").Value
                        };

                        CMO.GlobalRecipe.ListOfRecipeConfigFiles.Add(newSvr);
                        
                    }
                     
                }
 
            }

            // Load Settings
            CMO.GlobalSettings = new Settings();
            foreach (var sett in XMasterFile.Root.Element("Settings").Elements("Setting"))
            {
                var newSetting = new Settings.Setting();
                newSetting.Name = sett.Attribute("Name").Value;
                newSetting.Key = sett.Attribute("Key").Value;
                newSetting.GlobalDefaultValue = sett.Attribute("GlobalDefaultValue").Value;

                foreach (var applicComp in sett.Element("ApplicableComponents").Elements("Component"))
                {
                    newSetting.ListOfApplicableComponents.Add(applicComp.Attribute("Title").Value);
                }

                foreach (var overrideSetting in sett.Elements("Override"))
                {
                    var overridSet = new Settings.Setting.Overrides()
                    {
                        OverrideValue = overrideSetting.Attribute("OverrideValue").Value,
                        Component = overrideSetting?.Element("Component")?.Attribute("Title")?.Value,
                        Environment = overrideSetting?.Element("Environment")?.Attribute("Title")?.Value,
                        Server = overrideSetting?.Element("Server")?.Attribute("ComputerName")?.Value,
                    };

                    newSetting.ListOfOverrides.Add(overridSet);
                }

                CMO.GlobalSettings.ListOfSettings.Add(newSetting);
            }


            return CMO;
        }
        /// <summary>
        /// Loads the Master Config XML file into an ConfigMasterParsed Object
        /// </summary>
        /// <param name="ConfigMasterFilename"></param>
        /// <returns></returns>
        public static ConfigMasterParsed LoadConfigMasterFile(string ConfigMasterFilename)
        {
            var CMO = new ConfigMasterParsed();

            var XMasterFile = XDocument.Load(ConfigMasterFilename);

            //// Load registered Environments
            //foreach (var env in XMasterFile.Root.Element("Environments").Elements("Environment"))
            //{
            //    CMO.ListOfEnvironments.Add(new Models.Environment()
            //    {
            //        Title = env.Attribute("Title").Value,
            //        Description = env.Attribute("Description").Value
            //    });
            //}

            //// Load registered Servers
            //foreach (var env in XMasterFile.Root.Element("Servers").Elements("Server"))
            //{
            //    CMO.ListOfServers.Add(new Models.Computer()
            //    {
            //        ComputerName = env.Attribute("ComputerName").Value,
            //        Description = env.Attribute("Description").Value
            //    });
            //}


            //// Load registered Components
            //foreach (var env in XMasterFile.Root.Element("Components").Elements("Component"))
            //{
            //    CMO.ListOfComponents.Add(new Models.Component()
            //    {
            //        Title = env.Attribute("Title").Value,
            //        Description = env.Attribute("Description").Value
            //    });
            //}

            // Load Recipe
            CMO.GlobalRecipe = new ConfigFileInstances();

            foreach (var env in XMasterFile.Root.Element("Recipes").Elements("Environment"))
            {
                foreach (var comp in env.Elements("Component"))
                {
                    foreach (var svr in comp.Elements("Server"))
                    {
                        var newSvr = new ConfigFileInstances.ConfigFileInstance()
                        {
                            Environment    = env.Attribute("Title").Value,
                            Component      = comp.Attribute("Title").Value,
                            ComputerName   = svr.Attribute("ComputerName").Value,
                            ConfigFilePath = svr.Attribute("ConfigFilePath").Value
                        };

                        CMO.GlobalRecipe.ListOfRecipeConfigFiles.Add(newSvr);
                    }
                }
            }

            // Load Settings
            CMO.GlobalSettings = new Settings();
            foreach (var sett in XMasterFile.Root.Element("Settings").Elements("Setting"))
            {
                var newSetting = new Settings.Setting();
                newSetting.Name = sett.Attribute("Name").Value;
                newSetting.Key  = sett.Attribute("Key").Value;
                newSetting.GlobalDefaultValue = sett.Attribute("GlobalDefaultValue").Value;

                foreach (var applicComp in sett.Element("ApplicableComponents").Elements("Component"))
                {
                    newSetting.ListOfApplicableComponents.Add(applicComp.Attribute("Title").Value);
                }

                foreach (var overrideSetting in sett.Elements("Override"))
                {
                    var overridSet = new Settings.Setting.Overrides()
                    {
                        OverrideValue = overrideSetting.Attribute("OverrideValue").Value,
                        Component     = overrideSetting?.Element("Component")?.Attribute("Title")?.Value,
                        Environment   = overrideSetting?.Element("Environment")?.Attribute("Title")?.Value,
                        Server        = overrideSetting?.Element("Server")?.Attribute("ComputerName")?.Value,
                    };

                    newSetting.ListOfOverrides.Add(overridSet);
                }

                CMO.GlobalSettings.ListOfSettings.Add(newSetting);
            }


            return(CMO);
        }