/// <summary>
        /// Set a configuration to the pointer file
        /// </summary>
        /// <param name="configuration"></param>
        public void SetConfiguration(IConfiguration configuration)
        {
            var rawConfig = ReadFile().ToList();

            var internalModel = new InternalConfiguration(configuration);

            var categoryIndex = rawConfig.IndexOf(internalModel.ConfigurationNameStandard);

            if (categoryIndex != -1)
            {
                for (int i = categoryIndex + 1; i < rawConfig.Count; i++)
                {
                    if (FormatsStandars.IsValidCategoryName(rawConfig[i]))
                    {
                        // it is a category name, ignore it
                        continue;
                    }

                    string propertyString = rawConfig[i];
                    bool   isComment      = FormatsStandars.IsComment(propertyString);
                    bool   isEmpty        = String.IsNullOrWhiteSpace(propertyString);

                    if (isComment == false && isEmpty == false)
                    {
                        var property = MyConfigParser.ParseProperty(propertyString);

                        if (configuration.GetConfigurations().Any(x => x.Key == property.Key))
                        {
                            var newProperty = configuration.GetConfigurations().First(x => x.Key == property.Key);
                            // update the property
                            rawConfig[i] = "\t" + newProperty.Key + " = " + newProperty.Value;
                        }
                    }
                }
            }
            else
            {
                int lastIndexOfArray = rawConfig.Count == 0 ? 0 : rawConfig.Count - 1;

                if (lastIndexOfArray == 0)
                {
                    rawConfig.Add(internalModel.ConfigurationNameStandard);
                }
                else
                {
                    rawConfig[lastIndexOfArray] += Environment.NewLine + internalModel.ConfigurationNameStandard;
                }

                foreach (var item in internalModel.GetConfigurations())
                {
                    rawConfig[lastIndexOfArray] += Environment.NewLine + "\t" + item.Key + " = " + item.Value;
                }
            }

            File.WriteAllLines(this.Path, rawConfig);
        }
        internal IEnumerable <string> GetCategoriesNames()
        {
            var data = ReadFile();

            foreach (var item in data)
            {
                if (FormatsStandars.IsValidCategoryName(item.Trim()))
                {
                    yield return(item);
                }
            }
        }
        internal IConfiguration GetConfigurationByCategory(string categoryName)
        {
            if (!FormatsStandars.IsValidCategoryName(categoryName))
            {
                categoryName = categoryName.Replace("[", string.Empty).Replace("]", string.Empty);
                categoryName = String.Format("[{0}]", categoryName);
            }

            Configuration conf = new Configuration(categoryName);

            var data = ReadFile();

            for (int i = 0, total = data.Length; i < total; i++)
            {
                if (data[i] == categoryName)
                {
                    // reading the properties values
                    for (int y = i + 1; y < total; y++)
                    {
                        //|| String.IsNullOrEmpty(data[y]) ||
                        var trimed = data[y].Trim();
                        if (y >= data.Length || FormatsStandars.IsValidCategoryName(data[y]))
                        {
                            break;
                        }
                        else if (trimed.StartsWith(COMMENT) || String.IsNullOrEmpty(trimed))
                        {
                            continue;
                        }
                        else
                        {
                            var property = MyConfigParser.ParseProperty(data[y]);
                            conf.Add(property.Key, property.Value);
                        }
                    }
                }
            }

            return(conf);
        }