using System;
using System.Collections;
using System.Windows.Forms;

using Cosmos.UserFrame;
using Cosmos.ServiceProvider;
using Cosmos.Common;
using Cosmos.CommonManager;
using System.Drawing;

namespace Cosmos.Win
{
    public partial class frmInputData : Form
    {
        #region Variable
         
        //#20180123 인천공항 포스 경우 대기번호 입력창 닫을 때 인천공항 상태 체크하도록 수정 start,phj
        private SManager sManager = new SManager();
        private IAirPortTran m_cAirPortTran = null;
        //#20180123 인천공항 포스 경우 대기번호 입력창 닫을 때 인천공항 상태 체크하도록 수정 end,phj


        //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 DeviceStatus m_cDevStatus = new DeviceStatus();                     // 디바이스 관리

        private string m_sPosMenuKeyIn;
        public string PosMenuKeyIn { set { m_sPosMenuKeyIn = value; } get { return m_sPosMenuKeyIn; } }
        private string m_sPosMenuKeyOut;
        public string PosMenuKeyOut { set { m_sPosMenuKeyOut = value; } get { return m_sPosMenuKeyOut; } }

        #endregion

        #region 생성자 & 소멸자
        public frmInputData()
        {
            InitializeComponent();
            base.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint | ControlStyles.ResizeRedraw, true);
            //this.UpdateStyles();
            m_cPosStatus = (PosStatus)StateObject.POS;      
            //m_cTrnStatus = (TranStatus)StateObject.TRAN;
            m_cDevStatus = (DeviceStatus)StateObject.DEVICE;

            //#20180123 인천공항 포스 경우 대기번호 입력창 닫을 때 인천공항 상태 체크하도록 수정 start,phj
            m_cAirPortTran = (IAirPortTran)sManager.InitServiceInstance(ServiceLists.BSV_PAYMENT.DLL, ServiceLists.BSV_PAYMENT.AIRPORT_TRAN);
            //#20180123 인천공항 포스 경우 대기번호 입력창 닫을 때 인천공항 상태 체크하도록 수정 end,phj
        }
        /// <summary>
        /// 폼로드
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void frmInputData_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 + "()", "");
            this.TopMost = true;
            InitControl();
            txtInPutData.Select();
        }
        /// <summary>
        /// 폼 클로즈
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void frmInputData_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 + "()", lblTitle.Text);
        }
        #endregion

        #region 폼 컨트롤 초기화        
        /// <summary>
        /// 폼 컨트롤 초기화
        /// </summary>
        private void InitControl()
        {
            try
            {

                //this.Size = new Size(788, 402);
                //this.Location = new Point(216, 173);

                picBack.Image = ImageManager.GetImage(Cosmos.BaseFrame.BaseCom.NxImgPath, ImageManager.POP_SIZE_S);
                picBack.Location = new Point(0, 0);
                picBack.SendToBack();
                this.Size = picBack.Size = new Size(788, 402);

                btnExit.Image = ImageManager.GetImage(Cosmos.BaseFrame.BaseCom.NxImgPath, ImageManager.BTN_CLOSE);
                
                FormManager.SetFormAllControlFont(this, m_cPosStatus.Base.FONT);
                FormManager.SetTextBoxGlobalInfo(this, m_cPosStatus.Global.m_stCultureMaster.nGroupingDigits, m_cPosStatus.Global.m_stCultureMaster.strGroupingSymbol
                    , m_cPosStatus.Global.m_stCultureMaster.nDecimalDigits, m_cPosStatus.Global.m_stCultureMaster.strDecimalSymbol);

                btnExit.Image = ImageManager.GetImage(Cosmos.BaseFrame.BaseCom.NxImgPath, ImageManager.BTN_CLOSE);
                if (btnExit.Image != null) btnExit.Text = "";

                //if (PosMenuKeyIn == PosConst.FRM_INPUT_DATA.TRADENO || PosMenuKeyIn == PosConst.FRM_INPUT_DATA.POSNO 
                //    || PosMenuKeyIn == PosConst.FRM_INPUT_DATA.PRICE)     //거래번호,POS번호, 단가
                //{
                //    FormManager.MovePopUpForm(this, false, m_cPosStatus.Sale.ScreenSizeUser);
                //}
                //else
                //{
                //    FormManager.MovePopUpForm(this, true, m_cPosStatus.Sale.ScreenSizeUser);
                //}

                if (PosMenuKeyIn == PosConst.FRM_INPUT_DATA.ORDERNO || PosMenuKeyIn == PosConst.FRM_INPUT_DATA.APPRNO)
                {
                    FormManager.MovePopUpForm(this, true, m_cPosStatus.Sale.ScreenSizeUser);
                }
                else
                {
                    FormManager.MovePopUpForm(this, false, m_cPosStatus.Sale.ScreenSizeUser);
                }

                //테마색상 적용!
                padInPut.ThemeColor = m_cPosStatus.ScnMst.ThemeColor;
                padInPut.ClearBtnText = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0817);
                padInPut.SearchBtnText = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_1018);

                lblTitle.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0126);

                padInPut.BtnDotEnable = true;

                lblMsgDesc.Text = "";
                lblMsgDesc.Visible = false;
                lblMsgDesc.Location = new Point(22, 123);

                txtMemo.Text = string.Empty;
                pnlMemo.Visible = false;
                pnlMemo.Location = new Point(22, 123);

                btnExit.Visible = true;
                //btnExit.Text = "X";
                txtInPutData.InputType = UI.InputType.Digit;

                m_sPosMenuKeyOut = string.Empty;

                //QTY, AMT, RATE
                if (PosMenuKeyIn == PosConst.FRM_INPUT_DATA.RATE)       //율
                {
                    padInPut.BtnDotEnable = true;
                    lblMsg.Text = MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0234);
                    txtInPutData.MaxLength = 3; 
                }
                else if (PosMenuKeyIn == PosConst.FRM_INPUT_DATA.AMT)   //금액
                {
                    lblMsg.Text = MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0233);
                    txtInPutData.InputType = UI.InputType.Money;
                    txtInPutData.MaxLength = 10;
                }
                else if (PosMenuKeyIn == PosConst.FRM_INPUT_DATA.ORDERNO) //주문번호
                {
                    lblMsg.Text = MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0235);
                    lblMsgDesc.Text = ""; // MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0238);
                    //lblMsgDesc.Visible = true;
                    lblMsgDesc.Visible = false;

                    // KPS 사용일때만 메모입력 가능 
                    if (PosMstManager.GetPosOption(POS_OPTION.OPT506) == "1")
                    {
                        lblMemo.Text = MessageManager.GetLabelMessage(POS_MESSAGE.LABEL.MSG_0177);
                        pnlMemo.Visible = true;
                        txtMemo.Text = string.Empty;
                        txtMemo.MaxLength = 100;
                    }

                    //#10813 dkshin 대기(주문)번호 자릿 수 개선
                    //txtInPutData.MaxLength = 5;
                    txtInPutData.MaxLength = 6;

                    // grayber@20180110 전자영수증 주문(대기)번호표 출력 start - 폼 타이틀 처리 : 주문(대기)번호)
                    // 추가
                    lblTitle.Text = MessageManager.GetPrintMessage(POS_MESSAGE.PRINT.MSG_0097);
                    // grayber@20180110 전자영수증 주문(대기)번호표 출력 end

                    //if (m_cPosStatus.Base.PosType == PosConst.POS_TYPE.PRE_PAYMENT) //선불은 필수!
                    //{
                    //    btnExit.Visible = false;
                    //}
                }
                else if (PosMenuKeyIn == PosConst.FRM_INPUT_DATA.ELOVE) //환경사랑
                {
                    lblMsg.Text = MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0236);
                    lblMsgDesc.Text = MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0237);
                    lblMsgDesc.Visible = true;
                    txtInPutData.MaxLength = 5; 
                }
                else if (PosMenuKeyIn == PosConst.FRM_INPUT_DATA.TRADENO)   //거래번호
	            {
                    lblMsg.Text = MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0255);
                    txtInPutData.MaxLength = 5;
	            }
                else if (PosMenuKeyIn == PosConst.FRM_INPUT_DATA.POSNO)     //POS번호
	            {
                    lblMsg.Text = MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0460);
                    txtInPutData.MaxLength = 2;
	            }
                else if (PosMenuKeyIn == PosConst.FRM_INPUT_DATA.GUEST_CNT) //고객수
                {
                    lblMsg.Text = MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0489);
                    txtInPutData.MaxLength = 5;
                }
                else if (PosMenuKeyIn == PosConst.FRM_INPUT_DATA.PRICE)     //상품단가
                {
                    lblMsg.Text = MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0537);
                    txtInPutData.InputType = UI.InputType.Money;
                    txtInPutData.MaxLength = 10;
                }
                else if (PosMenuKeyIn == PosConst.FRM_INPUT_DATA.APPRNO)     //승인번호
                {
                    lblMsg.Text = MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0576);
                    txtInPutData.InputType = UI.InputType.Digit;
                    txtInPutData.MaxLength = 8;
                }
                else //수량
	            {
                    lblMsg.Text = MessageManager.GetErrorMessage(POS_MESSAGE.ERROR.MSG_0232);
                    txtInPutData.MaxLength = 5; 
	            }

                // 기능 버튼 설정 체크
                FormManager.SetbtnMenu(null, m_cDevStatus.ICReader.UseYn, btnMenu1, btnMenu2, btnMenu3, btnMenu4);

                txtInPutData.Value = "";
            }
            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 Control Event

        /// <summary>
        /// 입력박스 이벤트
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="sFuncValue"></param>
        private void txtEditBox_EditBoxKeyDownEvent(object sender, string sFuncValue)
        {
            try
            {
                if (sFuncValue == PosKey.MENU_KEY.ENTER)
                {
                    if (txtInPutData.Value == "") return;

                    // Del, 2017.05.11, 메모입력은 판매원 선택으로 ... 
                    //주문번호
                    //if (PosMenuKeyIn == PosConst.FRM_INPUT_DATA.ORDERNO && pnlMemo.Visible == true) 
                    //{
                    //    txtMemo.Select();
                    //    return;
                    //}

                    // 대기번호 입력시 구분자 설정 하여 메모와 함께 리턴
                    if (PosMenuKeyIn == PosConst.FRM_INPUT_DATA.ORDERNO && pnlMemo.Visible == true)
                    {
                        this.m_sPosMenuKeyOut = txtInPutData.Value.Trim() + "|" + txtMemo.Text.Replace("|", "").Trim();
                    }
                    else
                    {
                        m_sPosMenuKeyOut = txtInPutData.Value.Trim();
                    }


                    //#20180123 인천공항 포스 경우 대기번호 입력창 닫을 때 인천공항 상태 체크하도록 수정 start,phj
                    //기존
                    //this.DialogResult = DialogResult.OK;
                    //this.Close();

                    //변경
                    //#20180213 인천공항 상태체크 로직은 대기번호 입력화면에서만 체크 하도록 수정 start,phj
                    //기존
                    //if (PosMstManager.GetPosOption(POS_OPTION.OPT512) == "1")
                    //변경
                    if (PosMstManager.GetPosOption(POS_OPTION.OPT512) == "1" && PosMenuKeyIn == PosConst.FRM_INPUT_DATA.ORDERNO)
                    //#20180213 인천공항 상태체크 로직은 대기번호 입력화면에서만 체크 하도록 수정 end,phj
                    {
                        string sRet = string.Empty;
                        sRet = m_cAirPortTran.IncheonAirportCheck();
                        if (sRet == UserCom.RST_OK)
                        {
                            this.DialogResult = DialogResult.OK;
                            this.Close();
                        }
                    }
                    else
                    {
                        this.DialogResult = DialogResult.OK;
                        this.Close();
                    }
                    //#20180123 인천공항 포스 경우 대기번호 입력창 닫을 때 인천공항 상태 체크하도록 수정 end,phj
                }
                else if (sFuncValue == PosKey.MENU_KEY.CLEAR)
                {
                    if (((Cosmos.UI.CsmPosEditBox)sender).ReadOnly == false) ((Cosmos.UI.CsmPosEditBox)sender).Text = "";
                }
                else if (sFuncValue == PosKey.MENU_KEY.ESC_PREVIOUS)
                {

                    this.DialogResult = DialogResult.Cancel;
                    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);
            }
        }
        /// <summary>
        /// 입력박스 엔터 이벤트
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void txtEditBox_EnterEvent(object sender, EventArgs e)
        {
            try
            {
                padInPut.SetActiveControl = (Control)sender;
                
            }
            catch (Exception ex)
            {
                WinManager.ExceptionMessage(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                     System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message);
            }
        }

        /// <summary>
        /// 종료
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnExit_Click(object sender, EventArgs e)
        {
            //#20180123 인천공항 포스 경우 대기번호 입력창 닫을 때 인천공항 상태 체크하도록 수정 start,phj
            //기존 
            //this.Close();

            //변경 
            //#20180213 인천공항 상태체크 로직은 대기번호 입력화면에서만 체크 하도록 수정 start,phj
            //기존
            //if (PosMstManager.GetPosOption(POS_OPTION.OPT512) == "1")
            //변경
            if (PosMstManager.GetPosOption(POS_OPTION.OPT512) == "1" && PosMenuKeyIn == PosConst.FRM_INPUT_DATA.ORDERNO)
            //#20180213 인천공항 상태체크 로직은 대기번호 입력화면에서만 체크 하도록 수정 end,phj
            {
                // 인천공항 경우, 닫을 때 인천공항 포스 상태 체크한다.
                // 만약 제품 추가하기 위해서 인천공항 일괄취소 하면 자사포스에서 결제완료 후 반품까지 딜레이가 걸리기 때문에
                // 사전 방지한다.  
                string sRet = string.Empty;
                sRet = m_cAirPortTran.CloseClick();
                if (sRet == UserCom.RST_OK)
                {
                    this.Close();
                }
            }
            else
            {
                this.Close();
            }
            //#20180123 인천공항 포스 경우 대기번호 입력창 닫을 때 인천공항 상태 체크하도록 수정 end,phj
        }
        /// <summary>
        /// 소수점 처리
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void EditBoxTextChangedEvnet(object sender, EventArgs e)
        {

            try
            {
                //if (padInPut.BtnDotEnable == true)
                //{
                //    string stmp = ((Cosmos.UI.CsmPosEditBox)sender).Value;

                //    if (stmp.IndexOf(".") != -1)
                //        ((Cosmos.UI.CsmPosEditBox)sender).Value = Math.Truncate(m_cDataService.DoubleParse(stmp)).ToString();
                //}

            }
            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

        private void txtMemo_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == '|')
            {
                e.Handled = true;
                return;
            }
            if (e.KeyChar == '\r')
            {
                e.Handled = true;

                
                if (string.IsNullOrWhiteSpace(txtInPutData.Value))
                {
                    txtInPutData.Select();
                    return; 
                }

                // 입력완료 
                this.m_sPosMenuKeyOut = txtInPutData.Value.Trim() + "|" + txtMemo.Text.Replace("|", "").Trim();
                this.DialogResult = DialogResult.OK;
                this.Close();
            }
        }

        private void txtMemo_Enter(object sender, EventArgs e)
        {
            padInPut.SetActiveControl = (Control)sender;
        }
        
        #region User Method
        
        #endregion

    }
}
