using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using System.IO;
using System.Xml.Serialization;

namespace Model.Tools
{
    [Serializable]
    public class ConfigData
    {
        // Время последнего обновления конфига из приложения сервера
        public DateTime LastExportDate;

        // Записывать в конфиг файл созданные коренные папки
        public bool WriteNewRootDir { set; get; } = true;

        // Очистить базу при старте сервера
        public bool ClearDBWithStart { set; get; } = true;

        // Список коренных папок 
        // При старте они будут проиницилизированны (добавлены в базу и просканированы)
        public List<string> RootDirs { set; get; } = new List<string>();
        //{@"D:\GIT\WebFileServer\FileServer\Console\bin\Debug\Dir1" };
    }

    public class ConfigTools
    {
        readonly string ConfName = "Config.xml";

        public string ConfigDirectory { set; get; }    
        string ConfPath => Path.Combine(ConfigDirectory, ConfName);


        public ConfigData Data { set; get; } 
        public bool HaveChanges { set; get; }

        private static ConfigTools single;


        public static ConfigTools Get()
        {
            if (single == null)
                single = new ConfigTools();

            return single;
        }


        private ConfigTools()
        {            
        }


        public void Import()
        {
            if (File.Exists(ConfPath))
            {                
                XmlSerializer formatter = new XmlSerializer(typeof(ConfigData));
                using (FileStream fs = new FileStream(ConfPath, FileMode.Open))
                {
                    Data = (ConfigData)formatter.Deserialize(fs);
                }
            }
            else
                Data = new ConfigData();

            Export();
        }
        public void Export()
        {
            Data.LastExportDate = DateTime.Now;

            XmlSerializer formatter = new XmlSerializer(typeof(ConfigData));

            using (FileStream fs = new FileStream(ConfPath, FileMode.Create))
            {
                formatter.Serialize(fs, Data);
            }
        }


    }
}
