using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization.Formatters.Soap;
using System.Data;
using System.Xml.Serialization;
using Mesnac.Action.ChemicalWeighing.Entity;
using System.Configuration;

namespace Mesnac.Action.ChemicalWeighing
{
    /// <summary>
    /// 小料称量系统全局常量和变量和方法
    /// </summary>
    public class Global
    {
        #region 协议头常量
        /// <summary>
        /// 协议头常量
        /// </summary>
        public class ProtocalHeader
        {
            
        }

        #endregion

        #region 系统全局变量
        /// <summary>
        /// 系统全局变量
        /// </summary>
        public class PublicVar
        {
            #region 字段定义

            private bool _chemicalWeighingPlcOnlineFlag = false;
            private bool _localPlanIsRefresh = false;
            private List<string> _lstRubCtrl = new List<string>();

            #endregion

            #region 单例实现

            private static PublicVar instance;

            public static PublicVar Instance
            {
                get
                {
                    if (instance == null)
                    {
                        instance = new PublicVar();
                    }
                    return instance;
                }
            }

            private PublicVar() 
            {
            }

            #endregion

            #region 应用配置变量

            /// <summary>
            /// Socket通信侦听的IP地址
            /// </summary>
            public readonly string ListenServerIP = Mesnac.Basic.AppConfigHelper.GetAppSettingValue("ListenServerIP", "127.0.0.1");
            /// <summary>
            /// Socket通讯侦听的端口号
            /// </summary>
            public readonly int Port = Mesnac.Basic.AppConfigHelper.GetAppSettingValue("Port", 6666);

            
            #endregion

            #region RunSchema配置项

            /// <summary>
            /// 单机/网络:0为单机,1为网络
            /// </summary>
            public Mesnac.Action.Base.BaseAction.NetTypes NetType
            {
                get
                {
                    int intNetType = Mesnac.Basic.RunSchema.Instance.GetConfigValue("NetType", 0);
                    if (intNetType == 0)
                    {
                        return Base.BaseAction.NetTypes.Local;
                    }
                    else
                    {
                        return Base.BaseAction.NetTypes.Net;
                    }
                }
            }
            /// <summary>
            /// 网络服务器连接检测模式:0-网络库检测,1-Ping检测
            /// </summary>
            public int CheckConnectMode
            {
                get
                {
                    int checkConnectMode = Mesnac.Basic.RunSchema.Instance.GetConfigValue("CheckConnectMode", 1);
                    return checkConnectMode;
                }
            }
            /// <summary>
            /// 网络数据库服务器IP地址
            /// </summary>
            public string NetDbServerIP
            {
                get
                {
                    string netDbServerIP = Mesnac.Basic.RunSchema.Instance.GetConfigValue("NetDbServerIP", String.Empty);
                    return netDbServerIP;
                }
            }
            /// <summary>
            /// 当前机台编号
            /// </summary>
            public string EquipCode
            {
                get
                {
                    string equipCode = Mesnac.Basic.RunSchema.Instance.GetConfigValue("EquipCode", "01001");
                    return equipCode;
                }
            }
            /// <summary>
            /// 是否开启本地测试,一旦开启,则在配方下传、报表存盘时会增加支持测试的逻辑处理
            /// </summary>
            public bool IsLocalTest
            {
                get
                {
                    return Mesnac.Basic.RunSchema.Instance.GetConfigValue("IsLocalTest", false);
                }
            }

            /// <summary>
            /// PLC交互最大超时次数(每次500毫秒)
            /// </summary>
            public int MaxReadPlcCount
            {
                get
                {
                    return Mesnac.Basic.RunSchema.Instance.GetConfigValue("MaxReadPlcCount", 10);
                }
            }

            /// <summary>
            /// PLC交互时,清除请求信号前等待的时间,单位(毫秒)默认0秒,主要是方便PLC调试
            /// </summary>
            public int ClearRequestSleep
            {
                get
                {
                    return Mesnac.Basic.RunSchema.Instance.GetConfigValue("ClearRequestSleep", 0);
                }
            }

            /// <summary>
            /// 消息窗口显示模式,0-显示3秒自动关闭,1-手动关闭
            /// </summary>
            public int MessageDialogMode
            {
                get
                {
                    return Mesnac.Basic.RunSchema.Instance.GetConfigValue("MessageDialogMode", 0);
                }
            }
            /// <summary>
            /// 计划执行方式:0为单个执行,1为连续执行
            /// </summary>
            public int PlanExecuteType
            {
                get
                {
                    return Mesnac.Basic.RunSchema.Instance.GetConfigValue("PlanExecuteType", 0);
                }
            }
            /// <summary>
            /// 是否强制换班
            /// </summary>
            public bool IsForceShift
            {
                get
                {
                    return Mesnac.Basic.RunSchema.Instance.GetConfigValue("IsForceShift", false);
                }
            }
            /// <summary>
            /// 是否保存密炼曲线至MSSQLServer数据库
            /// </summary>
            public bool IsSaveMixCurveDataToMsSQL
            {
                get
                {
                    return Mesnac.Basic.RunSchema.Instance.GetConfigValue("IsSaveMixCurveDataToMsSQL", true);
                }
            }
            /// <summary>
            /// 是否保存开炼曲线至MSSQL数据库
            /// </summary>
            public bool IsSaveMillCurveDataToMsSQL
            {
                get
                {
                    return Mesnac.Basic.RunSchema.Instance.GetConfigValue("IsSaveMillCurveDataToMsSQL", true);
                }
            }
            /// <summary>
            /// 是否保存密炼曲线至InfluxDb数据库
            /// </summary>
            public bool IsSaveMixCurveDataToInfluxDb
            {
                get
                {
                    return Mesnac.Basic.RunSchema.Instance.GetConfigValue("IsSaveMixCurveDataToInfluxDb", false);
                }
            }
            /// <summary>
            /// 是否保存开炼曲线至InfluxDb数据库,请先正确配置InfluxDb数据库信息
            /// </summary>
            public bool IsSaveMillCurveDataToInfluxDb
            {
                get
                {
                    return Mesnac.Basic.RunSchema.Instance.GetConfigValue("IsSaveMillCurveDataToInfluxDb", false);
                }
            }
            /// <summary>
            /// 保存同一配方的最大版本数
            /// </summary>
            public int SaveRecipeVersionMaxCount
            {
                get
                {
                    return Mesnac.Basic.RunSchema.Instance.GetConfigValue("SaveRecipeVersionMaxCount", 5);
                }
            }
            /// <summary>
            /// 默认小数精度,即保留几位小数
            /// </summary>
            public int DefaultPrecision
            {
                get
                {
                    return Mesnac.Basic.RunSchema.Instance.GetConfigValue("DefaultPrecision", 3);
                }
            }
            /// <summary>
            /// 配方下传模式:0:非交互,直接下传;1:交互
            /// </summary>
            public int PlcDownloadMode
            {
                get
                {
                    return Mesnac.Basic.RunSchema.Instance.GetConfigValue("PlcDownloadMode", 0);
                }
            }

            #endregion

            #region 系统常量定义

            /// <summary>
            /// 登录业务GUID
            /// </summary>
            public readonly string LoginGUID = "CD72C0AB64BB4F81824C22A4A4BED295";

            /// <summary>
            /// 配方数据导出路径
            /// </summary>
            public readonly string RecipeExportPath = System.IO.Path.Combine(ICSharpCode.Core.FileUtility.ApplicationRootPath, "Data", "RecipeDataExport");

            #endregion

            #region 系统属性定义

            /// <summary>
            /// 机台计划刷新标识,在刷新机台计划时设置为true,在更新计划状态后设置为false
            /// </summary>
            public bool LocalPlanIsRefresh
            {
                get
                {
                    return this._localPlanIsRefresh;
                }
                set
                {
                    this._localPlanIsRefresh = value;
                }
            }

            #endregion

            #region 属性定义
            
            /// <summary>
            /// 项目名称
            /// </summary>
            public string ProjectWizardName { get; set; }

            /// <summary>
            /// 小料称量PLC在线标志
            /// </summary>
            public bool ChemicalWeighingPlcOnlineFlag
            {
                get { return _chemicalWeighingPlcOnlineFlag; }
                set { _chemicalWeighingPlcOnlineFlag = value; }
            }

            /// <summary>
            /// 要展示的报警信息List
            /// </summary>
            public List<string> AlarmStrList = new List<string>();

            /// <summary>
            /// 监控画面是否刷新显示标识(主屏监控画面)
            /// </summary>
            public bool isFlashFlag = false;

            /// <summary>
            /// 监控画面是否刷新显示标识(扩展屏监控画面)
            /// </summary>
            public bool isFlashFlagExtend = false;

            /// <summary>
            /// 测试时所用变量(测试用)
            /// </summary>
            public int alarmNumCount = 0;

            /// <summary>
            /// 扫码枪条码开始截取位置(三元现场未用到)
            /// </summary>
            public int ScanCodeStrStart = 0;

            /// <summary>
            /// 扫码枪条码结束截取位置(三元现场未用到)
            /// </summary>
            public int ScanCodeStrEnd = 10;

            /// <summary>
            /// 手动秤启用标志
            /// </summary>
            public bool ManualWeightFlag = false;

            /// <summary>
            /// 下传计划的物料信息
            /// </summary>
            public List<Pmt_weigh> currentListPmt_weigh = new List<Pmt_weigh>();

            /// <summary>
            /// 班次编号
            /// </summary>
            public int globalShiftID = 0 ;

            #endregion
        }

        #endregion
    }
}