using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data;
using ICSharpCode.Core;
using Mesnac.Controls.Base;
using Mesnac.Action.Base;
using Mesnac.Codd.Session;
using Mesnac.Action.ChemicalWeighing.Entity;
using Mesnac.Action.ChemicalWeighing.Technical;

namespace Mesnac.Action.ChemicalWeighing.FinishBatch.SCADAHelper
{
    public class AlarmRefreshAction : ChemicalWeighingAction,IAction
    {
        #region 事件定义

        /// <summary>
        /// 刷新计划事件
        /// </summary>
        public static event EventHandler OnAlarmRefresh;

        #endregion

        #region 字段定义
        
        private RuntimeParameter _runtime;
        private IBaseControl _clientGridControl = null;      //报警信息列表控件
        private IBaseControl _clientAlarmInfoControl = null;    //报警控件容器
        Mesnac.Controls.Default.MultiColHeaderDgv clientGrid = null;
        #endregion

        #region IAction接口实现

        public void Run(RuntimeParameter runtime)
        {
            Global.PublicVar.Instance.isFlashFlag = false;
            base.RunIni(runtime);       //必须要调用的
            this._runtime = runtime;
            
            #region 事件订阅

            if (true)
            {
                Mesnac.Basic.InvokeHelper.OnAlarmRefresh -= Process_Event;
                Mesnac.Basic.InvokeHelper.OnAlarmRefresh += Process_Event;

                //报警刷新保存事件绑定
                SaveHelper.AlarmSaveHelper.sender = runtime;
                SaveHelper.AlarmSaveHelper.OnAlarmSave -= Process_Event;
                SaveHelper.AlarmSaveHelper.OnAlarmSave += Process_Event;
                
            }

            #endregion

            IBaseControl baseControl = null;
            IBaseControl infoControl = null;
            bool gridFlag = false;
            bool infoFlag = false;
            foreach(IBaseControl ib in GetAllMCControls())
            {
                if(ib.MCKey == null)
                {
                    continue;
                }
                else
                {
                    if(ib.MCKey == "alarmDG")
                    {
                        baseControl = ib;
                        gridFlag = true;
                    }
                    if(ib.MCKey == "alarmInfoList")
                    {
                        infoControl = ib;
                        infoFlag = true;
                    }
                }
                if(gridFlag && infoFlag)
                {
                    break;
                }
            }
            
            if (baseControl == null || !(baseControl is DataGridView))
            {
                ICSharpCode.Core.LoggingService<AlarmRefreshAction>.Error("{当班计划—刷新计划}缺少本机台计划网格控件...");
                //return;
            }

            this._clientGridControl = baseControl;
            this._clientAlarmInfoControl = infoControl;
            this.DoWork();
        }

        #endregion

        #region 方法定义

        /// <summary>
        /// 刷新计划
        /// </summary>
        protected void DoWork()
        {
            #region 业务实现
            
            DataTable table = DataListShow();
            lock (String.Empty)
            {
                //本地计划
                if (this._clientGridControl != null && this._clientAlarmInfoControl != null)
                {
                    if (table != null)
                    {
                        _clientGridControl.BindDataSource = null;
                        _clientGridControl.BindDataSource = table;
                        if (Global.PublicVar.Instance.AlarmStrList != null && Global.PublicVar.Instance.AlarmStrList.Count != 0)
                        {
                            this._clientAlarmInfoControl.MCVisible = true;
                        }
                        else
                        {
                            this._clientAlarmInfoControl.MCVisible = false;
                        }
                    }
                    else
                    {
                        this._clientAlarmInfoControl.MCVisible = false;
                    }
                }
                else
                {
                    ICSharpCode.Core.LoggingService<AlarmRefreshAction>.Warn("刷新本地计划失败:本地计划控件为Null...");
                }
            }
            #endregion

            #region 触发事件
            
            if (OnAlarmRefresh != null)
            {
                OnAlarmRefresh(this._runtime.BaseControl.MCRoot, System.EventArgs.Empty);
            }


            #endregion
        }

        #endregion

        #region 事件处理方法

        private void Process_Event(object sender, EventArgs e)
        {
            if (sender is RuntimeParameter)
            {
                this.Run(sender as RuntimeParameter);
            }
            else
            {
                this.Run(this._runtime);
            }
        }

        #endregion

        #region DataTable数据整理显示

        private DataTable DataListShow()
        {
            DataTable dataTable = null;

            if(Global.PublicVar.Instance.AlarmStrList != null && Global.PublicVar.Instance.AlarmStrList.Count > 0)
            {

                dataTable = new DataTable();

                DataColumn SerialNumColumnText = new DataColumn("SerialNum", Type.GetType("System.String"));
                DataColumn ShowTextColumnText = new DataColumn("ShowText", Type.GetType("System.String"));
                dataTable.Columns.Add(SerialNumColumnText);
                dataTable.Columns.Add(ShowTextColumnText);
                for (int i = 0;i< Global.PublicVar.Instance.AlarmStrList.Count;i++)
                {
                    DataRow dataRow = dataTable.NewRow();
                    dataRow["SerialNum"] = (i + 1).ToString();
                    dataRow["ShowText"] = Global.PublicVar.Instance.AlarmStrList[i];
                    dataTable.Rows.Add(dataRow);
                }
            }

            return dataTable;
        }

        #endregion

    }
}