using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Configuration;

namespace EVCB_OCPP.WSServer
{
    public static class GlobalConfig
    {
        public static List<string> ConfigKeys = new List<string>()
        {
            "WSPort",
            "WSSPort",
            "OCPP20_WSUrl",
            "OCPP20_WSSUrl",
            "SecurityProfileLevel",
            "SecurityPassword"
        };

        public static List<string> DenyModelNames = new List<string>();

        public static string UTC_DATETIMEFORMAT = "yyyy-MM-dd'T'HH':'mm':'ss'Z'";

        public static string TCC_API_URL = string.Empty;

        public static string TCC_SALTKEY = string.Empty;

        public static string OCPP20_WSUrl = string.Empty;

        public static string OCPP20_WSSUrl = string.Empty;

        public static int SecurityProfileLevel = 0;

        public static string SecurityPassword = string.Empty;

        public static JsonSerializerSettings JSONSERIALIZER_FORMAT = new JsonSerializerSettings()
        {
            NullValueHandling = NullValueHandling.Ignore,
            Formatting = Formatting.None,
            DateFormatString = UTC_DATETIMEFORMAT
        };

        /// <summary>
        /// 預設心跳間隔時間 單位:秒
        /// </summary>
        private static int DEFAULT_HEARTBEAT_INTERVAL = 60;



        /// <summary>
        ///WS Port
        /// </summary>
        private static int WS_Port = 2012;


        /// <summary>
        ///WSS Port 1
        /// </summary>
        private static int WSS_Port_1 = 2013;

        /// <summary>
        ///WSS Port 2
        /// </summary>
        private static int WSS_Port_2 = 2014;

        /// <summary>
        /// Load setting from app.config 
        /// </summary>
        public static bool LoadAPPConfig()
        {
            bool result = false;
            string key = string.Empty;
            try
            {

                for (int i = 0; i < ConfigKeys.Count; i++)
                {
                    key = ConfigKeys[i];
                    switch (key)
                    {
                        case "WSPort":// convert to int type                       
                            {
                                var value = ConfigurationManager.AppSettings[key];

                                WS_Port = Convert.ToInt32(value);
                            }
                            break;
                        case "WSSPort":
                            {
                                var value = ConfigurationManager.AppSettings[key].Split(',')[0];

                                WSS_Port_1 = Convert.ToInt32(ConfigurationManager.AppSettings[key].Split(',')[0]);
                                WSS_Port_2 = Convert.ToInt32(ConfigurationManager.AppSettings[key].Split(',')[1]);
                            }
                            break;
                        case "OCPP20_WSUrl":// convert to int type                       
                            {
                                var value = ConfigurationManager.AppSettings[key];

                                OCPP20_WSUrl = value;
                            }
                            break;
                        case "OCPP20_WSSUrl":// convert to int type                       
                            {
                                var value = ConfigurationManager.AppSettings[key];

                                OCPP20_WSSUrl = value;
                            }
                            break;
                        case "SecurityProfileLevel":
                            {
                                var value = ConfigurationManager.AppSettings[key];

                                SecurityProfileLevel = Convert.ToInt32(value);
                            }
                            break;
                        case "SecurityPassword":
                            {
                                var value = ConfigurationManager.AppSettings[key];

                                SecurityPassword = value;
                            }
                            break;
                        default://convert to string type                             
                            break;

                    }
                }
                result = true;

            }
            catch (Exception ex)
            {
                Console.WriteLine(key + " Load from APPConfig " + ex.ToString());

            }

            return result;
        }



        public static int GetWS_Port()
        {
            return WS_Port;
        }


        public static int GetWSS_Port_1()
        {
            return WSS_Port_1;
        }

        public static int GetWSS_Port_2()
        {
            return WSS_Port_2;
        }

        public static int GetHEARTBEAT_INTERVAL()
        {
            return DEFAULT_HEARTBEAT_INTERVAL;
        }

        public static readonly int DB_DefaultConnectionTimeout = 60;

        /// <summary>
        /// 預設 Null的 DateTime 
        /// </summary>
        public static DateTime DefaultNullTime = new DateTime(1991, 1, 1);





    }
}