using Newtonsoft.Json.Converters;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;

namespace InitializerModel
{
    public static class AppSettingConfig
    {
        private static AppSettingConfigModel _Instance;
        public static AppSettingConfigModel Instance
        {
            get
            {
                if (_Instance == null)
                {
                    Reload();
                }
                return _Instance;
            }
            private set => _Instance = value;
        }

        //private string _FirmwareRoot, _Language, _MES, _MechineCode;
        //private bool _IsDisableAuthRequired;
        //private string _JohnSenLedComPort;
        private static string settingFileName = "config.ini";

        //public AppSettingConfig()
        //{
        //    if (!File.Exists(settingFileName))
        //    {
        //        LoadDefaultSetting();
        //    }
        //    else
        //    {
        //        LoadSettingFromDefaultFile();
        //    }
        //}

        public static void Reload()
        {
            //Instance = new AppSettingConfig();

            if (!File.Exists(settingFileName))
            {
                LoadDefaultSetting();
            }
            else
            {
                LoadSettingFromDefaultFile();
            }
        }

        public static void Save()
        {
            //var toSave = new AppSettingConfigModel();
            //toSave.FirmwareRoot = _FirmwareRoot;
            //toSave.Language = _Language;
            //toSave.MES = _MES;
            //toSave.MechineCode = _MechineCode;
            //toSave.IsDisableAuthRequired = _IsDisableAuthRequired;

            File.WriteAllText(
                settingFileName,
                JsonConvert.SerializeObject(
                    Instance,
                    Formatting.Indented,
                    new StringEnumConverter()
                    ));
        }

        private static void LoadSettingFromDefaultFile()
        {
            try
            {
                LoadDefaultSetting();

                var configStr = File.ReadAllText(settingFileName);
                var config = Newtonsoft.Json.JsonConvert.DeserializeObject<AppSettingConfigModel>(configStr);

                CompacityChnage(config);

                _Instance = config;
                //_Instance.FirmwareRoot = config.FirmwareRoot;
                //_Language = config.Language;
                //_MES = config.MES;
                //_MechineCode = config.MechineCode;
                //_IsDisableAuthRequired = config.IsDisableAuthRequired;
                //_JohnSenLedComPort = config.JohnSenLedComPort;
            }
            catch
            {

            }
        }

        private static void LoadDefaultSetting()
        {
            _Instance = new AppSettingConfigModel()
            {
                FirmwareRoot = "./Firmware",
                Language = "zh-chs",
                MES = "sajet2",
                MechineCode = "testMechineCode"
            };
        }

        private static void CompacityChnage(AppSettingConfigModel config)
        {
            if (config == null)
            {
                return;
            }

            if (config.Language.ToLower() == "zh-chs")
            {
                config.Language = "zh-CHS";
            }

            if (config.Language.ToLower() == "en-us")
            {
                config.Language = "en-US";
            }


        }
    }
}