using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Collections;
using System.Runtime.InteropServices;
using System.IO;

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

/*-----------------------------------------------------------------------------------------------*/
// 설      명 : 화면보호기
// 작  성  자 : 
// 변경  이력 : 
/*-----------------------------------------------------------------------------------------------*/
namespace Cosmos.Service
{
    public partial class frmScreenSaver : Form
    {
        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 IMasterUs m_cMstService = null;                                     //마스터 관리

        private ArrayList m_alMedia = new ArrayList();      // 이미지 리스트
        private int m_nMediaPos = 0;                        // 이미지 표시 위치
        private int m_nCurrTime = 0;                        // 이미지 표시 경과시간

        public frmScreenSaver()
        {
            InitializeComponent();

            base.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint | ControlStyles.ResizeRedraw, true);
            //this.UpdateStyles();

            m_cPosStatus = (PosStatus)StateObject.POS;      //POS 기본정보
            m_cTrnStatus = (TranStatus)StateObject.TRAN;    //POS 거래정보

            m_cMstService = (IMasterUs)sManager.InitServiceInstance(ServiceLists.ASV_MASTER.DLL, ServiceLists.ASV_MASTER.POS_MASTER);
        }

        private void frmScreenSaver_Load(object sender, EventArgs e)
        {
            UserLog.WriteLogFile(UserCom.LOG_IOS, 
                                 System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                 System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + 
                                 System.Reflection.MethodBase.GetCurrentMethod().Name + "()", "");
            
            // 컨트롤 초기화
            InitControl();
        }

        private void frmScreenSaver_FormClosing(object sender, FormClosingEventArgs e)
        {
            UserLog.WriteLogFile(UserCom.LOG_IOS, 
                                 System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                 System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + 
                                 System.Reflection.MethodBase.GetCurrentMethod().Name + "()", "");
        }

        #region 컨트롤 초기화
        /// <summary>
        /// 폼 컨트롤 초기화
        /// </summary>
        private void InitControl()
        {
            try
            {
                FormManager.SetFormAllControlFont(this, m_cPosStatus.Base.FONT);

                // 폼 크기 설정
                this.Location = new Point(0, 0);
                picMedia.Location = new Point(1, 1);
                //wmpMedia.Location = new Point(1, 1);

                btnFunc1.BackColor = CmUtil.GetColorToString(m_cPosStatus.ScnMst.ThemeColor);
                btnFunc2.BackColor = CmUtil.GetColorToString(m_cPosStatus.ScnMst.ThemeColor);
                btnFunc1.Image = ImageManager.GetImage(BaseCom.NxImgPath, ImageManager.BTN_SAVER_PART);
                btnFunc2.Image = ImageManager.GetImage(BaseCom.NxImgPath, ImageManager.BTN_SAVER_OWN);

                lblFunc1.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0033);
                lblFunc2.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0034);

                btnFunc1.Size = new Size(273, 159);
                btnFunc2.Size = new Size(273, 159);
                lblFunc1.Size = new Size(178, 66);
                lblFunc2.Size = new Size(178, 66);

                //#17045 긴급)판매POS 대기 시 해피오더 안내 이미지 표시 start
                
                txtInPut.Text = MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0805);
               
                //#17045 긴급)판매POS 대기 시 해피오더 안내 이미지 표시 end

                if (m_cPosStatus.Sale.ScreenSizeUser == 800)
                {
                    this.Size = new Size(800, 600);
                    picMedia.Size = new Size(798, 598);
                    //wmpMedia.Size = new Size(798, 598);

                    btnFunc1.Location = new Point(85, 223);
                    btnFunc2.Location = new Point(443, 223);
                    lblFunc1.Location = new Point(171, 269);
                    lblFunc2.Location = new Point(528, 269);
                }
                else
                {
                    this.Size = new Size(1024, 768);
                    picMedia.Size = new Size(1022, 766);
                    //wmpMedia.Size = new Size(1022, 766);

                    btnFunc1.Location = new Point(187, 305);
                    btnFunc2.Location = new Point(565, 305);
                    lblFunc1.Location = new Point(273, 351);
                    lblFunc2.Location = new Point(650, 351);
                }
                this.Refresh();
                 
                //#17045 긴급)판매POS 대기 시 해피오더 안내 이미지 표시 start
                //기존
                /*
                txtInPut.Text = "";
                txtInPut.Top = this.Height + 10;
                picMedia.Visible = false;
                //wmpMedia.Visible = false;
                */

                //변경
                txtInPut.Top = 0;
                txtInPut.Left = 0;
                txtInPut.Width = this.Width;
               
                txtInPut.Visible = false;
                picMedia.Visible = false;

                btnFunc1.Visible = false;
                btnFunc2.Visible = false;
                lblFunc1.Visible = false;
                lblFunc2.Visible = false;

                tmrMedia.Enabled = false; 

                m_nMediaPos = 0;
                m_nCurrTime = 0;

                if (PosMstManager.GetPosOption(POS_OPTION.OPT556) == "1")
                {
                    //frmScreenSaver.Opacity = 100;
                    this.Opacity = 10D;

                    txtInPut.Visible = true;
                    txtInPut.BringToFront();
                    
                    if (m_alMedia.Count == 0)
                    {
                        m_alMedia.Clear();

                        if (CmUtil.Exists(BaseCom.NxCDPPath + PosConst.MST_IMG_PATH.CUSTOMER + "ScreenSaver1.png") == true)
                        {
                            m_alMedia.Add(new string[] { "1", //파일구분(1:이미지,2:동영상)
                                                     "30", //표시시간
                                                     "ScreenSaver1.png", //파일명
                                                     "000000", //시작시간
                                                     "235959"}); //끝 시간
                        }
                        if (CmUtil.Exists(BaseCom.NxCDPPath + PosConst.MST_IMG_PATH.CUSTOMER + "ScreenSaver2.png") == true)
                        {
                            m_alMedia.Add(new string[] { "1", //파일구분(1:이미지,2:동영상)
                                                         "30", //표시시간
                                                         "ScreenSaver2.png", //파일명
                                                         "000000", //시작시간
                                                         "235959"}); //끝 시간
                        }
                    }
                    tmrMedia.Enabled = true; 
                }
                else
                {
                    this.Opacity = 0.9D;

                    btnFunc1.Visible = true;
                    btnFunc2.Visible = true;
                    lblFunc1.Visible = true;
                    lblFunc2.Visible = true;
                }
                //#17045 긴급)판매POS 대기 시 해피오더 안내 이미지 표시 end

                //m_nMediaPos = 0;
                //m_nCurrTime = 0;
                //if (m_alMedia.Count == 0)
                //{
                //    m_alMedia.Clear();

                //    // 마스터 로딩
                //    string sQuery = "";
                //    sQuery += " SELECT * FROM POSMST..MST_CUST_DSP ";
                //    sQuery += " WHERE CMP_CD = '" + m_cPosStatus.Base.CmpCd + "'";
                //    sQuery += "   AND STOR_CD = '" + m_cPosStatus.Base.StoreNo + "'";
                //    sQuery += "   AND '" + m_cPosStatus.Base.SaleDate + "' BETWEEN START_DT AND FNSH_DT ";
                //    sQuery += "   AND DISP_KIND = '3' ";        // 표시종류(1:고객메인, 2:고객컨텐츠, 3:화면보호기)
                //    sQuery += "   AND USE_YN  = '" + PosConst.MST_USE_YN.YES + "'";
                //    sQuery += " ORDER BY DISP_DIV DESC, SEQ ";

                //    DataTable dtDspData = m_cMstService.Select(new string[] { sQuery });
                //    if (dtDspData == null || dtDspData.Rows.Count == 0) return;

                //    // 이벤트 컨텐츠 있으며 이벤트만 표시
                //    foreach (DataRow dr in dtDspData.Rows)
                //    {
                //        string sDow = CmUtil.GetDataRowStr(dr, PosMst.MST_CUST_DSP.DATA.DOW);
                //        if (sDow.Length >= 7)
                //        {
                //            DateTime dt = new DateTime(int.Parse(m_cPosStatus.Base.SaleDate.Substring(0, 4)), int.Parse(m_cPosStatus.Base.SaleDate.Substring(4, 2)), int.Parse(m_cPosStatus.Base.SaleDate.Substring(6, 2)));

                //            if (sDow.Substring((int)dt.DayOfWeek, 1) == "0") continue;
                //        }

                //        if (CmUtil.GetDataRowStr(dr, PosMst.MST_CUST_DSP.DATA.DISP_KIND) == "3")
                //        {
                //            // 파일구분(1:이미지,2:동영상), 표시시간, 파일명
                //            m_alMedia.Add(new string[] { CmUtil.GetDataRowStr(dr, PosMst.MST_CUST_DSP.DATA.FILE_TYPE)
                //                                      , CmUtil.GetDataRowStr(dr, PosMst.MST_CUST_DSP.DATA.FILE_TIME)
                //                                      , CmUtil.GetDataRowStr(dr, PosMst.MST_CUST_DSP.DATA.FILE_NM) 
                //                                      , CmUtil.GetDataRowStr(dr, PosMst.MST_CUST_DSP.DATA.START_HOUR)
                //                                      , CmUtil.GetDataRowStr(dr, PosMst.MST_CUST_DSP.DATA.FNSH_HOUR)});
                //        }
                //    }
                //}

                //DisplayMedia();
                
                //tmrMedia.Enabled = true;
            }
            catch (Exception ex)
            {
                WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                    System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message);
            }
        }
        #endregion

        #region  DisplayMedia(컨텐츠 표시)
        /// <summary>
        /// 컨텐츠 표시
        /// </summary>
        public void DisplayMedia()
        {
            try
            {
                if (m_alMedia.Count <= 0) return;

                if (m_nMediaPos >= m_alMedia.Count) m_nMediaPos = 0;

                // 파일구분(1:이미지,2:동영상), 표시시간, 파일명
                string[] saMedia = (string[])m_alMedia[m_nMediaPos];
                if (File.Exists(BaseCom.NxCDPPath + PosConst.MST_IMG_PATH.CUSTOMER + saMedia[2]) == false) return;

                if (CmUtil.IntParse(saMedia[3]) > CmUtil.IntParse(DateTime.Now.ToString("HHmmss")) || CmUtil.IntParse(saMedia[4]) < CmUtil.IntParse(DateTime.Now.ToString("HHmmss"))) return;

                if (saMedia[0] == PosConst.MEDIA_FILE_DIV.IMAGE)         // 이미지
                {
                    //wmpMedia.Visible = false;
                    picMedia.Visible = true;
                    picMedia.Image = CmUtil.LoadImage(BaseCom.NxCDPPath + PosConst.MST_IMG_PATH.CUSTOMER + saMedia[2]);
                    m_nCurrTime = CmUtil.IntParse(saMedia[1]);
                }
                else if (saMedia[0] == PosConst.MEDIA_FILE_DIV.MOVIE)     // 동영상
                {
                    picMedia.Visible = false;
                    //wmpMedia.Visible = true;
                    //wmpMedia.URL = BaseCom.NxCDPPath + PosConst.MST_IMG_PATH.CUSTOMER + saMedia[2];
                    m_nCurrTime = 0;
                }
            }
            catch (Exception ex)
            {
                WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                    System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message);
            }
        }
        #endregion

        #region 다음 컨텐츠 표시 체크
        /// <summary>
        /// 다음 컨텐츠 표시 체크
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void tmrMedia_Tick(object sender, EventArgs e)
        {
            try
            {
                tmrMedia.Enabled = false;

                //#17045 긴급)판매POS 대기 시 해피오더 안내 이미지 표시 start
                if (PosMstManager.GetPosOption(POS_OPTION.OPT556) == "1")
                {
                    m_nCurrTime = m_nCurrTime - 1;

                    if (m_nCurrTime <= 0)
                    {
                        m_nMediaPos++;
                        DisplayMedia();
                    }

                    picMedia.Focus();
                }
                //#17045 긴급)판매POS 대기 시 해피오더 안내 이미지 표시 end

                //// 컨텐츠 완료 체크
                //if (wmpMedia.Visible == true)            
                //{
                //    // 동영상
                //    if (wmpMedia.playState != WMPLib.WMPPlayState.wmppsPlaying && wmpMedia.playState != WMPLib.WMPPlayState.wmppsWaiting 
                //        && wmpMedia.playState != WMPLib.WMPPlayState.wmppsTransitioning)
                //    {
                //        m_nMediaPos++;
                //        DisplayMedia();
                //    }
                //}
                //else
                //{
                //    // 이미지
                //    m_nCurrTime = m_nCurrTime - 1;
                //    if (m_nCurrTime <= 0)
                //    {
                //        m_nMediaPos++;
                //        DisplayMedia();
                //    }
                //}
            }
            catch (Exception ex)
            {
                WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                    System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message);
            }
            tmrMedia.Enabled = true;
        }
        #endregion

        #region StoDisplay(컨텐츠 표시 종료)
        /// <summary>
        /// 컨텐츠 표시 종료
        /// </summary>
        public void StopDisplay()
        {
            try
            {
                //if (wmpMedia.Visible == true)
                //{
                //    wmpMedia.Ctlcontrols.stop();
                //    wmpMedia.URL = "";
                //}
                //tmrMedia.Enabled = false;

                this.DialogResult = DialogResult.OK;
                this.Close();
            }
            catch (Exception ex)
            {
                WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                    System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message);
            }
        }

        private void frmScreenSaver_KeyPress(object sender, KeyPressEventArgs e)
        {
            //#17045 긴급)판매POS 대기 시 해피오더 안내 이미지 표시 start
            //#17045 긴급)판매POS 대기 시 해피오더 안내 이미지 표시 start, 20181012
            //대기화면 표시된 상태에서 바코드 리딩시 첫번째자리 짤리는 증상으로 주석 처리
            /*
            if (PosMstManager.GetPosOption(POS_OPTION.OPT556) == "1")
            {
                StopDisplay();
            }
            */
            //#17045 긴급)판매POS 대기 시 해피오더 안내 이미지 표시 end, 20181012
            //#17045 긴급)판매POS 대기 시 해피오더 안내 이미지 표시 end
        }

        private void frmScreenSaver_Click(object sender, EventArgs e)
        {
            //#17045 긴급)판매POS 대기 시 해피오더 안내 이미지 표시 start
            if (PosMstManager.GetPosOption(POS_OPTION.OPT556) == "1")
            {
                StopDisplay();
            }
            //#17045 긴급)판매POS 대기 시 해피오더 안내 이미지 표시 end
        }

        //private void wmpMedia_ClickEvent(object sender, AxWMPLib._WMPOCXEvents_ClickEvent e)
        //{
        //    //StopDisplay();
        //}
        #endregion

        private void btnFunc1_Click(object sender, EventArgs e)
        {
            try
            {
                if (((Button)sender) == btnFunc1)           // 알바
                {
                    if (m_cPosStatus.Base.OwnPartDiv == PosConst.OWN_PART_DIV.OWN_DIV)
                    {
                        m_cPosStatus.Base.OwnPartDiv = PosConst.OWN_PART_DIV.PART_DIV;
                        //전송데이터 저장
                        IDataCommonUs cDataCommon = (IDataCommonUs)sManager.InitServiceInstance(ServiceLists.ASV_DATA_PROCESS.DLL, ServiceLists.ASV_DATA_PROCESS.DATA_COMMON);
                        cDataCommon.SaveServerRequestTransactionData(PosConst.RE_TRANSACTIONDATA.OWNER_MODE, new string[] { m_cPosStatus.Base.OwnPartDiv });
                    }
                }
                else if (((Button)sender) == btnFunc2)      // 점주
                {
                    if (m_cPosStatus.Base.OwnPartDiv == PosConst.OWN_PART_DIV.PART_DIV)
                    {
                        m_cPosStatus.Base.OwnPartDiv = PosConst.OWN_PART_DIV.OWN_DIV;
                        //전송데이터 저장
                        IDataCommonUs cDataCommon = (IDataCommonUs)sManager.InitServiceInstance(ServiceLists.ASV_DATA_PROCESS.DLL, ServiceLists.ASV_DATA_PROCESS.DATA_COMMON);
                        cDataCommon.SaveServerRequestTransactionData(PosConst.RE_TRANSACTIONDATA.OWNER_MODE, new string[] { m_cPosStatus.Base.OwnPartDiv });
                    }
                }
                StopDisplay();
            
            }
            catch (Exception ex)
            {
                WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                    System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message);
            }
        }

        private void lblFunc1_Click(object sender, EventArgs e)
        {
            try
            {
                if (((Label)sender) == lblFunc1)           // 알바
                {
                    btnFunc1_Click(btnFunc1, e);
                }
                else if (((Label)sender) == lblFunc2)      // 점주
                {
                    btnFunc1_Click(btnFunc2, e);
                }
            }
            catch (Exception ex)
            {
                WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                    System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message);
            }
        }

        private void txtInPut_Click(object sender, EventArgs e)
        {
            //#17045 긴급)판매POS 대기 시 해피오더 안내 이미지 표시 start
            if (PosMstManager.GetPosOption(POS_OPTION.OPT556) == "1")
            {
                StopDisplay();
            }
            //#17045 긴급)판매POS 대기 시 해피오더 안내 이미지 표시 end
        }
    }
}
