using System;
using System.Collections.Generic;
using MECF.Framework.Common.DataCenter;
using OpenSEMI.ClientBase;
using Venus_Themes.Unity;

namespace Venus_MainPages.Unity
{
    public static class ModuleManager
    {
        public static event Action<FlashWaferInformation> FlashWaferEvent;
        public static void OnFlashWafer(FlashWaferInformation para)
        {
            FlashWaferEvent?.Invoke(para);
        }

        /// <summary>
        /// all module need init
        /// </summary>
        public static readonly List<string> ModulesID = new List<string>()
        {
             "LLA","LLB","TMRobot","LP1","LP2","LP3","EfemRobot","Aligner1"
        };

        public static Dictionary<string, ModuleInfo> ModuleInfos { get; private set; } = new Dictionary<string, ModuleInfo>();

        static ModuleManager()
        {
            string installModules = (string)QueryDataClient.Instance.Service.GetConfig("System.InstalledModules");
            if (installModules.Contains("PMA"))
                ModulesID.Add("PMA");

            if (installModules.Contains("PMB"))
                ModulesID.Add("PMB");

            if (installModules.Contains("PMC"))
                ModulesID.Add("PMC");

            if (installModules.Contains("PMD"))
                ModulesID.Add("PMD");
            if (installModules.Contains("VCE1"))
                ModulesID.Add("VCE1");
            if (installModules.Contains("VPA"))
                ModulesID.Add("VPA");

            FlashWaferEvent += ModuleManager_FlashWaferEvent;
        }

        private static void ModuleManager_FlashWaferEvent(FlashWaferInformation obj)
        {


        }

        public static void Initialize()
        {

            ModuleInfos.Clear();
            foreach (string moduleID in ModulesID)
            {
                ModuleInfo modInfo = CreateModule(moduleID, true);
                ModuleInfos.Add(moduleID, modInfo);
            }
        }
        public static WaferStatusHandler CreateWaferStatusManager()
        {
            WaferStatusHandler WaferStatusManager;
            WaferStatusImp waferStatusImp = new WaferStatusImp(QueryDataClient.Instance.Service);
            WaferStatusManager = new WaferStatusHandler(waferStatusImp.GetWaferStatus, ModuleManager.ModulesID);
            WaferStatusManager.Handle();
            return WaferStatusManager;
        }
        private static ModuleInfo CreateModule(string p_modid, bool p_install)
        {
            ModuleInfo m_data;

            if (p_install)
                m_data = new ModuleInfo(p_modid, p_install, CreateWaferStatusManager().WaferStatusDic[p_modid], false);
            else
                m_data = new ModuleInfo(p_modid, p_install, null, false);

            return m_data;
        }
    }
    public class FlashWaferInformation
    {
        public string ModuleName { get; set; }
        public int SoltId { get; set; }
    }
}