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

namespace IACommService4CSharp
{
    public class IACommService_t
    {
        private static IIACommService4CSharp m_commService = null;
        private static GeneralConfig_t m_config            = null;
        private static bool m_isInitialised                = false;
        public static uint SetLogConfig(LogConfig_t logConfig)
        {
            if (m_isInitialised)
                return ErrorCode.InvalidState;

            if (null == logConfig)
                return ErrorCode.InvalidArgument;

            var logConfigItems = logConfig.GetConfig();

            var config = LogConfig();

            foreach (var configItem in logConfigItems)
            {
                config.SetParameter(configItem.Key, configItem.Value);
            }

            return ErrorCode.Good;
        }
        public static uint Initialise()
        {
            if (m_isInitialised)
                return ErrorCode.InvalidState;

            var commService = Instance();
            if (null == commService)
                return ErrorCode.InternalError;

            var status = commService.Initialise(LogConfig().Internal);
            if (ErrorCode.Good == status)
                m_isInitialised = true;

            return status;
        }
        //Internal use
        public static IIACommService4CSharp Instance()
        {
            if (null == m_commService)
                m_commService = IACommServiceFactory4CSharp.Create();

            return m_commService;
        }
        public static bool IsInitialised
        {
            get
            {
                return m_isInitialised;
            }
        }
        private static GeneralConfig_t LogConfig()
        {
            if (null == m_config)
                m_config = new GeneralConfig_t();

            return m_config;
        }
    }
}
