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

namespace LLNet.Tienda.MainForms.Forms.MisPuntos
{
    public partial class FrmCambCatTarj : Form
    {
        public FrmCambCatTarj(string tarj)
        {
            InitializeComponent();
            txttarjsubnvl.Text = tarj;
            LlenarParametros();
        }

        private string varUrlPts, varCodemprPts, varCodsucPts, id;

        /// <summary>Obtiene los parámetros necesarios de cada tienda </summary>
        private void LlenarParametros()
        {
            Utils.QueryParams qp = new LLNet.Utils.QueryParams();
            //CONSULTA LOS PARÁMETROS DE LA BD
            DataSet dsB = GUI.CApp.bll.getDataSet("PDV", "C_PPTS", qp);

            object[] datos = new object[3];
            datos = dsB.Tables[0].Rows[0].ItemArray;

            varUrlPts = datos[0].ToString();
            varCodemprPts = datos[1].ToString();
            varCodsucPts = datos[2].ToString();
        }

        private void sBtnSubirNivel_Click(object sender, EventArgs e)
        {
            try
            {
                string cambio = string.Empty;

                //Consulta la central a ver si puede subir
                Utils.QueryParams qp = new LLNet.Utils.QueryParams();
                qp.AddReplaceParam("pTARJETA", txttarjsubnvl.Text.Trim());
                // Llama el procedimiento que almacena el error de la recarga en la BD
                // SGUI.CApp.bll.ExecuteSql("PTS_P_SUBIR_CLI_CAT", qp, "PDV");

                DataSet dsB = GUI.CApp.bll.getDataSet("PDV", "PTS_F_ACTTIPO", qp);
                if (dsB.Tables.Count > 0)
                {
                    if (dsB.Tables[0].Rows.Count > 0)
                    {
                        object[] datos = new object[1];
                        datos = dsB.Tables[0].Rows[0].ItemArray;
                        cambio = datos[0].ToString();
                        if (cambio != "-1")
                        {

                            //Realiza la actualización con el Web Service
                            //www.mispuntoscr.com/desarrollo/cambio_tipo_tarjeta.php?cod_empresa=R5UN957N&numero_tarjeta=10000000000000000001&id_tipo_tarjeta=58
                            //Envia los datos al proveedor
                            string PData = "url_respuesta=" + varUrlPts + "cambio_tipo_tarjeta.php?tipo_respuesta=1&cod_empresa=" + varCodemprPts + "&numero_tarjeta=" + txttarjsubnvl.Text.Trim() + "&id_tipo_tarjeta=" + cambio + "&nombre_cajero=" + GUI.CApp.usuario;
                            string info = RequestPOST(varUrlPts + "cambio_tipo_tarjeta.php", PData);
                            info = info.Trim();
                            string[] datos2 = info.Split(' ');

                            /*
                            string PData = "url_respuesta=" + varUrlPts + "cambio_tipo_tarjeta.php?tipo_respuesta=1&cod_empresa=" + varCodemprPts + "&numero_tarjeta=" + txttarjsubnvl.Text.Trim() + "&id_tipo_tarjeta=" + cambio + "&nombre_cajero=" + GUI.CApp.usuario;
                            string info = RequestPOST(varUrlPts + "cambio_tipo_tarjeta.php", PData);
                            info = info.Trim();
                            string[] datos2 = info.Split(' ');
                            */


                            if (datos2.Length > 2)
                            {
                                if (datos2[0].ToString() == "10")
                                {
                                    //Se realiza la actualizacion
                                    AlmCliAct(cambio, txttarjsubnvl.Text.Trim());
                                }
                                else
                                {
                                    CApp.ShowMessage(info, "Afiliación - cambio_tipo_tarjeta ", true);
                                    BitacoraErrorWS("WS=" + varUrlPts + "cambio_tipo_tarjeta.php " + info, PData);
                                }
                            }
                            else
                            {
                                CApp.ShowMessage(info, "Afiliación - cambio_tipo_tarjeta", true);
                                BitacoraErrorWS("WS=" + varUrlPts + "cambio_tipo_tarjeta.php " + info, PData);
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                CApp.ShowMessage(ex.Message, "Afiliación - cambio_tipo_tarjeta", true);
            }
            finally
            {
                this.Close();
            }           
        }
                


        private void btnCancelar_Click(object sender, EventArgs e)
        {
            /*if (GUI.CApp.ValidateAccess("SlrCatpts", "Salir sin subir de Categoría Puntos"))
            {
                this.Close();
            }*/
            //subir obligatoriamente de nivel
            sBtnSubirNivel_Click(sender, e);
        }


        public void AlmCliAct(string TIPO, string TARJETA)
        {
            try
            {
                //AQUI VALIDO SI YA HA ESTADO EN ESE NIVEL DE CAMBIO
                Utils.QueryParams pTarjeta = new LLNet.Utils.QueryParams();
                pTarjeta.AddReplaceParam("TARJETA", txttarjsubnvl.Text.Trim());
                pTarjeta.AddReplaceParam("NIVEL", TIPO);

                string vExistencia = CApp.bll.GetSingleValue("WMS_F_NIVELES_TARJ", pTarjeta, "PDV").ToString();
                if (vExistencia == "N")
                {
                    // MessageBox.Show("El nivel que esta porYA HAS ESTADO");
                    //GUI.CApp.ShowMessage("Ya a estado en el nivel que esta por pasar", "Mis Puntos", false);
                    using (Forms.MisPuntos.frmAfiliacion vform = new Forms.MisPuntos.frmAfiliacion())
                    {
                        vform.txtMTarjet.Text = txttarjsubnvl.Text.Trim();
                        vform.ShowDialog();
                    }
                }

                Utils.QueryParams qp = new LLNet.Utils.QueryParams();
                qp.AddReplaceParam("pTARJETA", TARJETA);
                qp.AddReplaceParam("pTIPO", TIPO);
                // Llama el procedimiento que almacena el error de la recarga en la BD
                GUI.CApp.bll.ExecuteSql("PTS_P_ACT_HISTIPCLI", qp, "PDV");
                CApp.ShowMessage("Cambio de categoría realizado con éxito", "Afiliación - Cambio de Categoría", true);

            }
            catch (Exception ex)
            {
                throw ex;
            }
        }



        /// <summary>Ejecuta por medio de post un llamado al Web Service utilizando HTTP POST</summary>
        /// <param name="URL"></param>
        /// <param name="PostData"></param>
        /// <returns></returns>
        private string RequestPOST(string URL, string PostData)
        {
            // Create a request using a URL that can receive a post. 
            WebRequest request = WebRequest.Create(URL);
            // Set the Method property of the request to POST.
            request.Method = "POST";
            // Create POST data and convert it to a byte array.
            //string postData = "";
            byte[] byteArray = Encoding.UTF8.GetBytes(PostData);
            // Set the ContentType property of the WebRequest.
            request.ContentType = "application/x-www-form-urlencoded";
            // Set the ContentLength property of the WebRequest.
            request.ContentLength = byteArray.Length;
            // Get the request stream.
            Stream dataStream = request.GetRequestStream();
            // Write the data to the request stream.
            dataStream.Write(byteArray, 0, byteArray.Length);
            // Close the Stream object.
            dataStream.Close();
            // Get the response.
            WebResponse response = request.GetResponse();
            // Display the status.
            // MessageBox.Show(((HttpWebResponse)response).StatusDescription, "DESCRIPCION");
            // Get the stream containing content returned by the server.
            dataStream = response.GetResponseStream();
            // Open the stream using a StreamReader for easy access.
            StreamReader reader = new StreamReader(dataStream);
            // Read the content.
            string responseFromServer = reader.ReadToEnd();
            // Display the content.            
            // Clean up the streams.
            reader.Close();
            dataStream.Close();
            response.Close();
            return responseFromServer;
        }

        //almacena el error en el WS
        private void BitacoraErrorWS(string pError, string pWServ)
        {
            if (pWServ.Length > 300)
                pWServ = pWServ.Substring(0, 300);
            Utils.QueryParams qp = new LLNet.Utils.QueryParams();
            qp.AddReplaceParam("pError", pError);
            qp.AddReplaceParam("pWServ", pWServ);
            // Llama el procedimiento que almacena el error del WS en la BD
            GUI.CApp.bll.ExecuteSql("WMS_P_BITAC_E_AFIL", qp, "PDV");
        }

    }
    
}
