using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Text.RegularExpressions;
using LLNet.GUI;

namespace LLNet.Tienda.MainForms.Forms
{
    public partial class FrmRegCliente : Form
    {
        /********************DLQG-IGF****************************************************/
        decimal nDoc = 0;//Número de documento
        decimal total = 0;//Total de la compra
        string cedula = "";//Cédula del cliente
        bool guardar = false;
        bool clientExiste = false;

        public FrmRegCliente(decimal documento, decimal ctotal)
        {
            InitializeComponent();
            //
            this.nDoc = documento;
            this.total = ctotal;
        }

        #region Limpiar
        /// <summary>
        /// Limpiar datos
        /// </summary>
        private void Limpiar()
        {
            this.txtNombre.Text = String.Empty;
            this.txtApellido1.Text = String.Empty;
            this.txtApellido2.Text = String.Empty;
            this.txtEmail.Text = String.Empty;
            this.mtxtTelefono1.Text = String.Empty;
            this.mtxtTelefono2.Text = String.Empty;
        }
        #endregion

        #region CrearCupones
        /// <summary>
        /// Crea los cupones
        /// </summary>
        private void CrearCupones()
        {
            if (this.nDoc != 0 && this.total != 0)
            {
                Utils.QueryParams parametros = new LLNet.Utils.QueryParams();
                parametros.AddReplaceParam("pDocumento", this.nDoc.ToString());

                //Número de cupones
                int numCupones = Convert.ToInt32(GUI.CApp.bll.GetSingleValue("NumCupones", parametros, "PDV").ToString());
                //
                parametros.Clear();
                parametros = new LLNet.Utils.QueryParams();
                parametros.AddReplaceParam("pCedula", this.cedula);
                parametros.AddReplaceParam("pDocumento", this.nDoc.ToString());
                parametros.AddReplaceParam("pCant", numCupones.ToString());
                //
                GUI.CApp.bll.ExecuteSql("AlmCupon", parametros, "PDV");
                //
                this.clientExiste = false;
                CApp.ShowMessage("Número de cupones: " + numCupones.ToString(), "Registrar Cliente", true);
                this.Close();
            }
            else
            {
                CApp.ShowMessage("Datos actualizados/almacenados", "Registrar Cliente", true);
                this.Close();
            }
        }
        #endregion

        #region RegCliente
        /// <summary>
        /// Almacena los datos del cliente
        /// </summary>
        private void RegCliente()
        {
            Utils.QueryParams parametros = new LLNet.Utils.QueryParams();
            parametros.AddReplaceParam("pCedula", this.cedula);
            parametros.AddReplaceParam("pNombre", this.txtNombre.Text);
            parametros.AddReplaceParam("pApellido1", this.txtApellido1.Text);
            parametros.AddReplaceParam("pApellido2", this.txtApellido2.Text);
            parametros.AddReplaceParam("pTelefono1", this.mtxtTelefono1.Text);
            if (this.mtxtTelefono2.MaskCompleted)
                parametros.AddReplaceParam("pTelefono2", this.mtxtTelefono2.Text);
            else if(!this.mtxtTelefono2.MaskCompleted)
                parametros.AddReplaceParam("pTelefono2", "");
            parametros.AddReplaceParam("pEmail", this.txtEmail.Text);
            GUI.CApp.bll.ExecuteSql("AlmCliente", parametros, "PDV");
            CrearCupones();
        }
        #endregion

        #region ActCliente
        /// <summary>
        /// Actualiza los datos del cliente
        /// </summary>
        private void ActCliente()
        {
            Utils.QueryParams parametros = new LLNet.Utils.QueryParams();
            parametros.AddReplaceParam("pCedula", this.cedula);
            parametros.AddReplaceParam("pTelefono1", this.mtxtTelefono1.Text);
            if (this.mtxtTelefono2.MaskCompleted)
                parametros.AddReplaceParam("pTelefono2", this.mtxtTelefono2.Text);
            else if (!this.mtxtTelefono2.MaskCompleted)
                parametros.AddReplaceParam("pTelefono2", "");
            parametros.AddReplaceParam("pEmail", this.txtEmail.Text);
            GUI.CApp.bll.ExecuteSql("ActCliente", parametros, "PDV");
            CrearCupones();
        }
        #endregion

        #region ConsulCliente
        /// <summary>
        /// Verifica si el cliente existe
        /// </summary>
        private void ConsulCliente()
        {
            Utils.QueryParams parametro = new LLNet.Utils.QueryParams();
            parametro.AddReplaceParam("Cedula", this.cedula);
            //
            DataSet ds_cliente = new DataSet();
            ds_cliente = GUI.CApp.bll.getDataSet("PDV", "ConsultClient", parametro);
            //
            if (ds_cliente.Tables.Count > 0 && ds_cliente.Tables[0].Rows.Count > 0)
            {
                if (this.txtNombre.Enabled)
                {
                    //Carga los datos
                    this.txtNombre.Text = ds_cliente.Tables[0].Rows[0].ItemArray[0].ToString();
                    this.txtApellido1.Text = ds_cliente.Tables[0].Rows[0].ItemArray[1].ToString();
                    this.txtApellido2.Text = ds_cliente.Tables[0].Rows[0].ItemArray[2].ToString();
                    this.mtxtTelefono1.Text = ds_cliente.Tables[0].Rows[0].ItemArray[3].ToString();
                    this.mtxtTelefono2.Text = ds_cliente.Tables[0].Rows[0].ItemArray[4].ToString();
                    this.txtEmail.Text = ds_cliente.Tables[0].Rows[0].ItemArray[5].ToString();
                    //
                    this.clientExiste = true;                    
                    //
                    this.txtNombre.Enabled = false;
                    this.txtApellido1.Enabled = false;
                    this.txtApellido2.Enabled = false;
                    this.txtCedula.Enabled = false;
                }
            }
            else
            {
                this.clientExiste = false;
                if (!this.guardar)
                {
                    this.clientExiste = false;

                    if (this.txtCedula.Text != "")
                    {
                        if (this.txtNombre.Text != "" && this.txtApellido1.Text != "" && this.txtApellido2.Text != "" && this.mtxtTelefono1.MaskCompleted)
                        {
                            if (CApp.ShowMessage("El cliente no existe. ¿Desea registrar el cliente?", "Registrar Cliente", true, true) == DialogResult.OK)
                            {
                                this.guardar = true;
                                this.txtCedula.Text = this.cedula;
                            }
                            else
                            {
                                this.txtNombre.Enabled = true;
                                this.txtApellido1.Enabled = true;
                                this.txtApellido2.Enabled = true;
                                this.txtCedula.Text = String.Empty;
                                this.cedula = String.Empty;
                                this.guardar = false;
                                //
                                Limpiar();
                                this.txtCedula.Focus();
                            }
                        }
                        else
                        {
                            CApp.ShowMessage("El cliente no existe", "Registrar Cliente", true);
                            this.cedula = String.Empty;
                            this.guardar = false;
                        }
                    }
                }
            }
        }
        #endregion

        #region btnSalir_Click
        private void btnSalir_Click(object sender, EventArgs e)
        {
            if (CApp.ShowMessage("¿Desea salir?", "Registrar Cliente", true, true) == DialogResult.OK)
                this.Close();
        }
        #endregion

        #region btnAceptar_Click
        private void btnAceptar_Click(object sender, EventArgs e)
        {
            try
            {
                Regex regx = new Regex(@"^\d-\d{4,4}-\d{4,4}$");//Expresión regular para el número de cédula
                //
                if (this.rbtnCedula.Checked)
                {
                    if (!regx.IsMatch(this.txtCedula.Text))
                    {
                        this.txtCedula.Focus();
                        CApp.ShowMessage("¡Digite/complete la cédula del cliente con el formato 0-0000-0000!", "Registrar Cliente", true);
                    }
                    else
                    {
                        this.cedula = this.txtCedula.Text;
                    }
                }
                else if (this.rbtnPasaporte.Checked)
                {
                    if (this.txtCedula.Text == "")
                    {
                        this.txtCedula.Focus();
                        CApp.ShowMessage("¡Digite el número de pasaporte del cliente!", "Registrar Cliente", true);
                    }
                    else
                    {
                        this.cedula = this.txtCedula.Text;
                    }
                }
                //
                if (this.cedula != "")
                {                    
                    if (this.txtNombre.Text == "")
                    {
                        this.txtNombre.Focus();
                        CApp.ShowMessage("¡Digite el nombre del cliente!", "Registrar Cliente", true);
                    }
                    else if (this.txtApellido1.Text == "")
                    {
                        this.txtApellido1.Focus();
                        CApp.ShowMessage("¡Digite el primer apellido del cliente!", "Registrar Cliente", true);
                    }
                    else if (this.txtApellido2.Text == "")
                    {
                        this.txtApellido2.Focus();
                        CApp.ShowMessage("¡Digite el segundo apellido del cliente!", "Registrar Cliente", true);
                    }
                    else if (!this.mtxtTelefono1.MaskCompleted)
                    {
                        this.mtxtTelefono1.Focus();
                        CApp.ShowMessage("¡Digite/complete el teléfono 1 del cliente!", "Registrar Cliente", true);
                    }
                    else
                    {
                        ConsulCliente();

                        if (clientExiste)
                            ActCliente();
                        else if (this.guardar)
                        {
                            RegCliente();                            
                        }
                        else if (!this.guardar)
                        {
                            this.guardar = false;
                            this.cedula = "";
                            this.txtCedula.Focus();
                            //
                            Limpiar();
                        }

                        this.guardar = false;
                    }
                }
            }
            catch (Exception ex)
            {
                CApp.ShowMessage("Ocurrió un Error en la Aplicación: \r\n" + ex.Message + "\r\nRepórtelo a su Departamento de Soporte", "Registrar Cliente", true);
            }
        }
        #endregion

        #region FrmRegCliente_KeyDown
        private void FrmRegCliente_KeyDown(object sender, KeyEventArgs e)
        {
            switch (e.KeyCode)
            {
                case Keys.F12:
                    btnAceptar_Click(null, null);
                    break;
                case Keys.Escape:
                    btnSalir_Click(null, null);
                    break;
                case Keys.Enter:
                    btnBuscar_Click(null, null);
                    break;
                case Keys.F5:
                    this.txtCedula.Text = String.Empty;
                    this.cedula = String.Empty;
                    Limpiar();
                    this.txtNombre.Enabled = true;
                    this.txtApellido1.Enabled = true;
                    this.txtApellido2.Enabled = true;
                    this.txtCedula.Enabled = true;
                    this.txtCedula.Focus();
                    break;
            }
        }
        #endregion

        #region btnBuscar_Click
        private void btnBuscar_Click(object sender, EventArgs e)
        {
            try
            {
                Regex regx = new Regex(@"^\d-\d{4,4}-\d{4,4}$");//Expresión regular para el número de cédula
                //
                if (this.rbtnCedula.Checked)
                {
                    if (!regx.IsMatch(this.txtCedula.Text))
                    {
                        this.txtCedula.Focus();
                        CApp.ShowMessage("¡Digite/complete la cédula del cliente con el formato 0-0000-0000!", "Registrar Cliente", true);
                    }
                    else
                        this.cedula = this.txtCedula.Text;
                }
                //
                if (this.rbtnPasaporte.Checked)
                {
                    if (this.txtCedula.Text == "")
                    {
                        this.txtCedula.Focus();
                        CApp.ShowMessage("¡Digite el número de pasaporte del cliente!", "Registrar Cliente", true);
                    }
                    else
                        this.cedula = this.txtCedula.Text;
                }
                //
                if(this.cedula != "")
                {
                    this.guardar = false;
                    ConsulCliente();
                }
            }
            catch (Exception ex)
            {
                CApp.ShowMessage("Ocurrió un Error en la Aplicación: \r\n" + ex.Message + "\r\nRepórtelo a su Departamento de Soporte", "Registrar Cliente", true);
            }
        }
        #endregion

        #region sbtnHabilitar_Click
        private void sbtnHabilitar_Click(object sender, EventArgs e)
        {
            this.txtCedula.Text = String.Empty;
            this.cedula = String.Empty;
            Limpiar();
            this.txtNombre.Enabled = true;
            this.txtApellido1.Enabled = true;
            this.txtApellido2.Enabled = true;
            this.txtCedula.Enabled = true;
            this.txtCedula.Focus();
        }
        #endregion
    }
}