using System;
using System.Text;
using System.Threading;

using Cosmos.UserFrame;
using Cosmos.Common;

//using Microsoft.PointOfService;
using System.ComponentModel;

/*-----------------------------------------------------------------------------------------------*/
// 설      명 : Msr 제어
// 작  성  자 : 
// 변경  이력 : 
/*-----------------------------------------------------------------------------------------------*/
namespace Cosmos.OLEDevice
{
    /// <summary>
    /// Msr 제어 CLASS
    /// </summary>
    public class DeviceMsr : IMsrUs
    {
        /// <summary>
        /// StateServer Object (StateServer 객체)
        /// </summary>
        public StateServer StateObject = (StateServer)StateServer.GetInstance();
        /// <summary>
        /// Device 상태 정보 객체
        /// </summary>
        public DeviceStatus devStatus = new DeviceStatus();
        ///// <summary>
        ///// Pos for .Net Msr 객체
        ///// </summary>
        //private Msr msr = null;
        ///// <summary>
        ///// Pos for .Net의 Device 정보를 가져오기 위한 객체
        ///// </summary>
        //private PosExplorer posExplorer = null;


        private string m_sTrackData1 = string.Empty;
        private string m_sTrackData2 = string.Empty;
        private string m_sTrackData3 = string.Empty;

        /// <summary>
        /// 이벤트 비동기 발생을 위한 대리자
        /// </summary>
        private BackgroundWorker bw = null;

        private int m_nErrorCount = 0;

        /// <summary>
        /// 생성자
        /// </summary>
        public DeviceMsr()
        {
            try
            {
                //posExplorer = new PosExplorer();
                devStatus = (DeviceStatus)StateObject.DEVICE;
                DeviceStatusInit();
                bw = new BackgroundWorker();

                m_nErrorCount = 0;
            }
            catch (Exception ex)
            {
                UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,      // Project Name (프로젝트명)
                                    "DevicePosPrinter.DeviceMsr()", ex.Message);
            }
        }

        /// <summary>
        /// 장비의 Event 발생 Enable 상태 설정
        /// <para>True:사용가능, False:사용불가능</para>
        /// </summary>
        public bool DeviceEnabled
        {
            get
            {
                return false;
            }
            set
            {
                try
                {
                    bool bRet = SetDeviceEnabled(value);
                }
                catch (Exception ex)
                {
                    UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,      // Project Name (프로젝트명)
                                        "DeviceMsr.DeviceEnabled()", ex.Message);
                }
            }
        }

        /// <summary>
        /// 장비의 Event 발생 Enable 상태 설정
        /// <para>True:사용가능, False:사용불가능</para>
        /// </summary>
        private bool SetDeviceEnabled(bool bEnable)
        {
            bool bRet = false;

            try
            {

            }
            catch (Exception ex)
            {
                UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,      // Project Name (프로젝트명)
                                    "DeviceMsr.SetDeviceEnabled()", ex.Message);
                devStatus.Msr.Status = "DEVICE ENABLED FAIL";
            }
            return bRet;
        }

        /// <summary>
        /// 디바이스 Open시 처리함수
        /// </summary>
        /// <param name="sDeviceType">장비종류(ex- "Msr","PosPrinter","Scanner"...)</param>
        /// <param name="sLogicalName">레지스트리 항목(ex- "DefaultMsr","DefaultPosPrinter","DefaultScanner"...)</param>
        /// <returns></returns>
        public bool OpenDevice(string sDeviceType, string sLogicalName)
        {
            bool bRet = false;

            try
            {
                
            }
            catch (Exception ex)
            {
                UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,      // Project Name (프로젝트명)
                                    "DeviceMsr.OpenDevice()", ex.Message);
                devStatus.Msr.Open = false;
                devStatus.Msr.Status = "DEVICE OPEN EXCEPTION";
                return bRet;
            }

            return bRet;
        }


        

        /// <summary>
        /// Msr StateServer 정보 초기화
        /// </summary>
        private void DeviceStatusInit()
        {
            devStatus.Msr.Track1Data = "";
            devStatus.Msr.Track2Data = "";
            devStatus.Msr.Track3Data = "";
            devStatus.Msr.DeviceName = "";
            devStatus.Msr.Status = "";
            devStatus.Msr.Open = false;
        }

        /// <summary>
        /// 디바이스 Close시 처리함수</para>
        /// </summary>
        /// <returns></returns>
        public bool CloseDevice()
        {
            bool bRet = false;

            try
            {
       

                devStatus.Msr.Status = "CLOSE";
                devStatus.Msr.Open = false;
            }
            catch (Exception ex)
            {
                UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,      // Project Name (프로젝트명)
                                    "DeviceMsr.CloseDevice()", ex.Message);
                devStatus.Msr.Status = "CLOSE EXCEPTION";
            }
            return bRet;
        }
    }
}
