using System;
using System.Text;
using System.Collections;
using System.Data;

using Cosmos.BaseFrame;
using Cosmos.UserFrame;
using Cosmos.ServiceProvider;
using Cosmos.Common;
using Cosmos.CommonManager;

/*-----------------------------------------------------------------------------------------------*/
// 설      명 : 고객 화면
// 작  성  자 : 
// 변경  이력 : 
/*-----------------------------------------------------------------------------------------------*/
namespace Cosmos.Service
{
    /// <summary>
    /// 고객용 화면
    /// </summary>
    class CustDisplay : ICustDisplayUs
    {
        private SManager sManager = new SManager();                                 // 이 객체를 통해 업무 Service 호출
        private StateServer StateObject = (StateServer)StateServer.GetInstance();   // StateObject : StateServer Object (객체)
        private PosStatus m_cPosStatus = new PosStatus();                           // 기본정보 참조
        private TranStatus m_cTrnStatus = new TranStatus();                         // 거래정보 참조

        private IDatabaseSQL m_cSqlDbService = null;                                // 데이터베이스 관리
        private IMasterUs m_cMstService = null;                                     // 마스터 인터페이스
        private IDataCommonUs m_cDataCommon = null;                                 // POS 공통함수 인터페이스

        /// <summary>
        /// 고객용화면
        /// </summary>
        private frmCustDisplayPipe m_frmCustDisplay = null;
        /// <summary>
        /// 스크린세이버
        /// </summary>
        private frmScreenSaver m_frmScreenSaver = null;

        //#16569 파스쿠찌 드라이브 스루 기능 개발 요청 start
        /// <summary>
        /// 고객용화면 DT
        /// </summary>
        private frmCustDisplayPipeDT m_frmCustDisplayDT = null;
        //#16569 파스쿠찌 드라이브 스루 기능 개발 요청 end

        /// <summary>
        /// 생성자
        /// </summary>
        public CustDisplay()
        {
            m_cPosStatus = (PosStatus)StateObject.POS;
            m_cTrnStatus = (TranStatus)StateObject.TRAN;

            m_cSqlDbService = (IDatabaseSQL)sManager.InitServiceInstance(ServiceLists.AGENT_DATABASE.DLL, ServiceLists.AGENT_DATABASE.DATABASE_MSSQL);
            m_cMstService = (IMasterUs)sManager.InitServiceInstance(ServiceLists.ASV_MASTER.DLL, ServiceLists.ASV_MASTER.POS_MASTER);
            m_cDataCommon = (IDataCommonUs)sManager.InitServiceInstance(ServiceLists.ASV_DATA_PROCESS.DLL, ServiceLists.ASV_DATA_PROCESS.DATA_COMMON); 
        }

        /// <summary>
        /// 고객용 화면 시작
        /// </summary>
        public void StartCustDisplay()
        {
            try
            {
                // 고객용동영상 관련(0:사용안함, 1:사용함)
                if (PosMstManager.GetPosOption(POS_OPTION.OPT103) == "0") return;

                //#16569 파스쿠찌 드라이브 스루 기능 개발 요청 start
                //기존
                /*
                if (m_frmCustDisplay == null)
                {
                    m_frmCustDisplay = new frmCustDisplayPipe();
                }
                
                m_frmCustDisplay.Show();
                m_frmCustDisplay.Refresh();

                m_frmCustDisplay.StartCustDisplay();               
                */
                //변경
                if (PosMstManager.GetPosOption(POS_OPTION.OPT103) == "3")
                {
                    if (m_frmCustDisplayDT == null)
                    {
                        m_frmCustDisplayDT = new frmCustDisplayPipeDT();
                    }

                    m_frmCustDisplayDT.Show();
                    m_frmCustDisplayDT.Refresh();

                    m_frmCustDisplayDT.StartCustDisplay();
                }
                else
                {
                    if (m_frmCustDisplay == null)
                    {
                        m_frmCustDisplay = new frmCustDisplayPipe();
                    }

                    m_frmCustDisplay.Show();
                    m_frmCustDisplay.Refresh();

                    m_frmCustDisplay.StartCustDisplay();
                }
                //#16569 파스쿠찌 드라이브 스루 기능 개발 요청 end
            }
            catch (Exception ex)
            {
                UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                    System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message);
            }
        }

        /// <summary>
        /// 고객용 화면 멈춤
        /// </summary>
        public void StopCustDisplay()
        {
            try
            {
                // 고객용동영상 관련(0:사용안함, 1:사용함)
                if (PosMstManager.GetPosOption(POS_OPTION.OPT103) == "0") return;

                //#16569 파스쿠찌 드라이브 스루 기능 개발 요청 start
                //기존
                /*
                if (m_frmCustDisplay == null) return;

                m_frmCustDisplay.StopCustDisplay();
                */
                //변경
                if (PosMstManager.GetPosOption(POS_OPTION.OPT103) == "3")
                {
                    if (m_frmCustDisplayDT == null) return;

                    m_frmCustDisplayDT.StopCustDisplay();
                }
                else
                {
                    if (m_frmCustDisplay == null) return;

                    m_frmCustDisplay.StopCustDisplay();
                }
                //#16569 파스쿠찌 드라이브 스루 기능 개발 요청 end
            }
            catch (Exception ex)
            {
                UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                    System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message);
            }
        }

        /// <summary>
        /// 고객용 화면 종료
        /// </summary>
        public void CloseCustDisplay()
        {
            try
            {
                // 고객용동영상 관련(0:사용안함, 1:사용함)
                if (PosMstManager.GetPosOption(POS_OPTION.OPT103) == "0") return;

                //#16569 파스쿠찌 드라이브 스루 기능 개발 요청 start
                //기존
                /*
                if (m_frmCustDisplay == null) return;

                m_frmCustDisplay.StopCustDisplay();

                m_frmCustDisplay.Close();
                */
                //변경
                if (PosMstManager.GetPosOption(POS_OPTION.OPT103) == "3")
                {
                    if (m_frmCustDisplayDT == null) return;

                    m_frmCustDisplayDT.StopCustDisplay();

                    m_frmCustDisplayDT.Close();
                }
                else
                {
                    if (m_frmCustDisplay == null) return;

                    m_frmCustDisplay.StopCustDisplay();

                    m_frmCustDisplay.Close();
                }
                //#16569 파스쿠찌 드라이브 스루 기능 개발 요청 end
            }
            catch (Exception ex)
            {
                UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                    System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message);
            }
        }

        /// <summary>
        /// 상품등록 내역 초기화
        /// </summary>
        public void ClearSaleItemList()
        {
            try
            {
                // 고객용동영상 관련(0:사용안함, 1:사용함)
                if (PosMstManager.GetPosOption(POS_OPTION.OPT103) == "0") return;

                //#16569 파스쿠찌 드라이브 스루 기능 개발 요청 start
                //기존
                /*
                if (m_frmCustDisplay == null) return;

                m_frmCustDisplay.ClearSaleItemList();
                */
                //변경
                if (PosMstManager.GetPosOption(POS_OPTION.OPT103) == "3")
                {
                    if (m_frmCustDisplayDT == null) return;

                    m_frmCustDisplayDT.ClearSaleItemList();
                }
                else
                {
                    if (m_frmCustDisplay == null) return;

                    m_frmCustDisplay.ClearSaleItemList();
                }
                //#16569 파스쿠찌 드라이브 스루 기능 개발 요청 end
            }
            catch (Exception ex)
            {
                UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                    System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message);
            }
        }

        /// <summary>
        /// 상품등록 내역 화면 표시
        /// </summary>
        public void DisplaySaleItemList(bool bPlu, bool bPay, int nSelRow)
        {
            try
            {
                // 고객용동영상 관련(0:사용안함, 1:사용함)
                if (PosMstManager.GetPosOption(POS_OPTION.OPT103) == "0") return;

                //#16569 파스쿠찌 드라이브 스루 기능 개발 요청 start
                //기존
                /*
                if (m_frmCustDisplay == null) return;

                m_frmCustDisplay.DisplaySaleItemList(bPlu, bPay, "", nSelRow);
                */
                //변경
                if (PosMstManager.GetPosOption(POS_OPTION.OPT103) == "3")
                {
                    if (m_frmCustDisplayDT == null) return;

                    m_frmCustDisplayDT.DisplaySaleItemList(bPlu, bPay, "", nSelRow);
                }
                else
                {
                    if (m_frmCustDisplay == null) return;

                    m_frmCustDisplay.DisplaySaleItemList(bPlu, bPay, "", nSelRow);
                }
                //#16569 파스쿠찌 드라이브 스루 기능 개발 요청 end
            }
            catch (Exception ex)
            {
                UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                    System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message);
            }
        }

        /// <summary>
        /// 상품등록 내역 포커스 처리
        /// </summary>
        public void DisplaySaleItemSelect(int nSelRow)
        {
            try
            {
                // 고객용동영상 관련(0:사용안함, 1:사용함)
                if (PosMstManager.GetPosOption(POS_OPTION.OPT103) == "0") return;

                //#16569 파스쿠찌 드라이브 스루 기능 개발 요청 start
                //기존
                /*
                if (m_frmCustDisplay == null) return;

                m_frmCustDisplay.DisplaySaleItemSelect(nSelRow);
                */
                //변경
                if (PosMstManager.GetPosOption(POS_OPTION.OPT103) == "3")
                {
                    if (m_frmCustDisplayDT == null) return;

                    m_frmCustDisplayDT.DisplaySaleItemSelect(nSelRow);
                }
                else
                {
                    if (m_frmCustDisplay == null) return;

                    m_frmCustDisplay.DisplaySaleItemSelect(nSelRow);
                }
                //#16569 파스쿠찌 드라이브 스루 기능 개발 요청 end
            }
            catch (Exception ex)
            {
                UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                    System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message);
            }
        }
        /// <summary>
        /// 거래완료 내역 화면 표시
        /// </summary>
        public void SaleCompleteDisplay(double nChangeAmt)
        {
            try
            {
                // 고객용동영상 관련(0:사용안함, 1:사용함)
                if (PosMstManager.GetPosOption(POS_OPTION.OPT103) == "0") return;

                //#16569 파스쿠찌 드라이브 스루 기능 개발 요청 start
                //기존
                /*
                if (m_frmCustDisplay == null) return;

                m_frmCustDisplay.SaleCompleteDisplay(nChangeAmt);
                */
                //변경
                if (PosMstManager.GetPosOption(POS_OPTION.OPT103) == "3")
                {
                    if (m_frmCustDisplayDT == null) return;

                    m_frmCustDisplayDT.SaleCompleteDisplay(nChangeAmt);
                }
                else
                {
                    if (m_frmCustDisplay == null) return;

                    m_frmCustDisplay.SaleCompleteDisplay(nChangeAmt);
                }
                //#16569 파스쿠찌 드라이브 스루 기능 개발 요청 end
            }
            catch (Exception ex)
            {
                UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                    System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message);
            }
        }

        /// <summary>
        /// 외화 내역 화면 표시
        /// </summary>
        public void DisplayForeignCashList(string sForeignInfo)
        {
            try
            {
                // 고객용동영상 관련(0:사용안함, 1:사용함)
                if (PosMstManager.GetPosOption(POS_OPTION.OPT103) == "0") return;

                //#16569 파스쿠찌 드라이브 스루 기능 개발 요청 start
                //기존
                /*
                if (m_frmCustDisplay == null) return;

                m_frmCustDisplay.DisplaySaleItemList(false, true, sForeignInfo, 0);
                */
                //변경
                if (PosMstManager.GetPosOption(POS_OPTION.OPT103) == "3")
                {
                    if (m_frmCustDisplayDT == null) return;

                    m_frmCustDisplayDT.DisplaySaleItemList(false, true, sForeignInfo, 0);
                }
                else
                {
                    if (m_frmCustDisplay == null) return;

                    m_frmCustDisplay.DisplaySaleItemList(false, true, sForeignInfo, 0);
                }
                //#16569 파스쿠찌 드라이브 스루 기능 개발 요청 end
            }
            catch (Exception ex)
            {
                UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                    System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message);
            }
        }

        /// <summary>
        /// 캠페인 컨텐츠 표시
        /// </summary>
        public void DisplayCampaign(string sFileDiv, string sFileName)
        {
            try
            {
                // 캠페인 컨텐츠 사용유무(0:미사용, 1:사용)
                if (PosMstManager.GetPosOption(POS_OPTION.OPT106) == "0") return;

                if (sFileDiv == PosConst.MEDIA_FILE_DIV.IMAGE)
                    m_cTrnStatus.Sale.CampaignFileName = sFileName;
                else
                    m_cTrnStatus.Sale.CampaignFileName = "";

                //#16569 파스쿠찌 드라이브 스루 기능 개발 요청 start
                //기존
                /*
                if (m_frmCustDisplay == null) return;

                m_frmCustDisplay.m_sCampaignFileName = sFileName;
                if (sFileDiv == "") sFileDiv = "0";
                m_frmCustDisplay.m_sCampaignFileDiv = sFileDiv;
                */
                //변경
                if (PosMstManager.GetPosOption(POS_OPTION.OPT103) == "1")
                {
                    if (m_frmCustDisplayDT == null) return;

                    m_frmCustDisplayDT.m_sCampaignFileName = sFileName;
                    if (sFileDiv == "") sFileDiv = "0";
                    m_frmCustDisplayDT.m_sCampaignFileDiv = sFileDiv;
                }
                else
                {
                    if (m_frmCustDisplay == null) return;

                    m_frmCustDisplay.m_sCampaignFileName = sFileName;
                    if (sFileDiv == "") sFileDiv = "0";
                    m_frmCustDisplay.m_sCampaignFileDiv = sFileDiv;
                }
                //#16569 파스쿠찌 드라이브 스루 기능 개발 요청 end

                //m_frmCustDisplay.DisplayCampaign(sFileDiv, sFileName);
            }
            catch (Exception ex)
            {
                UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                    System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message);
            }
        }

        /// <summary>
        /// 화면 보호기 시작
        /// </summary>
        public bool ScreenSaverDisplay()
        {
            try
            {
                if (m_cPosStatus.Sale.ScreenSaverTime == "" || CmUtil.LongParse(m_cPosStatus.Sale.ScreenSaverTime) == 0) return false;

                //스크린세이버 기능(0: 사용안함. 1:사용함, 2:사용함(LOGOFF))
                if (PosMstManager.GetPosOption(POS_OPTION.OPT013) != "1" && PosMstManager.GetPosOption(POS_OPTION.OPT013) != "2") return false;

                // 스크린세이버 기능(0:사용안함. 그외 사용함(대기시간초))
                long nScreenDurTime = CmUtil.LongParse(PosMstManager.GetPosOption(POS_OPTION.OPT014));
                if (nScreenDurTime <= 0) return false;

                // 경과 시간 체크
                DateTime dtDurTime = DateTime.ParseExact(m_cPosStatus.Sale.ScreenSaverTime, "yyyyMMddHHmmss", null);
                if ( dtDurTime.AddSeconds(nScreenDurTime) > DateTime.Now) return false;

                if (m_frmScreenSaver == null) m_frmScreenSaver = new frmScreenSaver();

                m_frmScreenSaver.ShowDialog();

                m_cPosStatus.Sale.ScreenSaverTime = DateTime.Now.ToString("yyyyMMddHHmmss");

                return true;
            }
            catch (Exception ex)
            {
                UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                    System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message);
            }
            return false;
        }
    }
}
