using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using MySql.Data.MySqlClient;
using MySql.Data;
using System.Net;
using System.IO;
using System.Collections.Specialized;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
namespace EjemploMysql
{
    public partial class principal : Form
    {
        MySqlConnection conector;
        String telefonoModificar="";
        String nombreModificar = "";
        String apellidoModificar = "";
        public principal()
        {
            conexionBD();
            InitializeComponent();
        }
        public void conexionBD()
        {
            conector=new MySqlConnection();
            conector.ConnectionString = "Server=localhost;Port=3306;DataBase=ejemploMysql;Uid=root;Pwd=123";
            try
            {
                conector.Open();
            }
            catch (MySqlException e)
            {
                e.ErrorCode.ToString();
            }
        }       

        private void localToolStripMenuItem_Click(object sender, EventArgs e)
        {
            frmPassServidor frm = new frmPassServidor();
            if (frm.ShowDialog() == DialogResult.OK)
            {
                if (frm.contrasena == true)
                {
                    lblConexion.Text = "Local";
                }
            }
        }

        private void remotaToolStripMenuItem_Click(object sender, EventArgs e)
        {
            frmPassServidor frm = new frmPassServidor();
            if (frm.ShowDialog() == DialogResult.OK)
            {
                if (frm.contrasena == true)
                {
                    lblConexion.Text = "Remoto";
                }
            }

        }

        

        private void cerrarSesionToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.Hide();
            new Login().Show();
        }

        

        private void principal_Load(object sender, EventArgs e)
        {
            if (!Parametros.tipo.Equals("admin"))
            {
                conexionToolStripMenuItem.Enabled = false;
                nuevoUsuarioToolStripMenuItem.Enabled = false;
            }
        }
        public void grabarLocal()
        {
            if(conector.State!=ConnectionState.Open){
                conector.Open();
            }
            
            String nombre = txtNombreAltas.Text;
            String apellido = txtApellidoAltas.Text;
            String telefono = txtTelefonoAltas.Text;
            if (nombre.Equals("") || apellido.Equals("") || telefono.Equals(""))
            {
                MessageBox.Show("Favor de llenar todos los campos");
            }
            else
            {
                try
                {
                    MySqlCommand ejecutador = conector.CreateCommand();
                    ejecutador.CommandText = "insert into datos values(null,@nombre,@apellido,@telefono);";
                    ejecutador.Parameters.AddWithValue("@nombre",nombre);
                    ejecutador.Parameters.AddWithValue("@apellido", apellido);
                    ejecutador.Parameters.AddWithValue("@telefono", telefono);
                    ejecutador.ExecuteNonQuery();
                    conector.Close();
                    cancelarAltas();
                }catch(MySqlException e){
                    MessageBox.Show(e.Message);
                }
            }
        }
        public void grabarRemoto()
        {
            string URL = "http://localhost/EjemploMysql/Altas.php";
            WebClient webClient = new WebClient();

            NameValueCollection formData = new NameValueCollection();
            formData["nombre"] = txtNombreAltas.Text;
            formData["apellido"] = txtApellidoAltas.Text;
            formData["telefono"] = txtTelefonoAltas.Text;

            byte[] responseBytes = webClient.UploadValues(URL, "POST", formData);
            string responsefromserver = Encoding.UTF8.GetString(responseBytes);
           // Console.WriteLine(responsefromserver);
            webClient.Dispose();
          //  MessageBox.Show("Respuesta del Servidor: " + responsefromserver);
            MessageBox.Show("Informacion Enviada con Exito");
            cancelarAltas();
        }

        public void buscarLocalBajas()
        {
            if (conector.State != ConnectionState.Open)
            {
                conector.Open();
            }
            if (!txtTelefonoBajas.Text.Equals(""))
            {
                MySqlCommand ejecutador = conector.CreateCommand();
                ejecutador.CommandText = "select *from datos where telefono='" + txtTelefonoBajas.Text + "'";
                MySqlDataReader captura = ejecutador.ExecuteReader();
                if (captura.Read())
                {
                    txtNombreBajas.Text = captura.GetString(1);
                    txtApellidoBajas.Text = captura.GetString(2);

                }
                else
                {
                    MessageBox.Show("Telefono no Localizado");
                }
            }
            else
            {
                MessageBox.Show("Favor de introducir un Telefono");
            }
            conector.Close();

        }
        public void buscarRemotoBajas()
        {
            string URL = "http://localhost/EjemploMysql/Buscar.php";
            WebClient webClient = new WebClient();

            NameValueCollection formData = new NameValueCollection();
            formData["telefono"] = txtTelefonoBajas.Text;

            byte[] responseBytes = webClient.UploadValues(URL, "POST", formData);
            string json = Encoding.UTF8.GetString(responseBytes);
            webClient.Dispose();
            if (!json.Equals("[]"))
            {
                listaDatos resp = JsonConvert.DeserializeObject<listaDatos>(json);
                Dato elemento = resp.datos[0];
                MessageBox.Show(resp.datos.Count.ToString());
                txtNombreBajas.Text = elemento.nombre;
                txtApellidoBajas.Text = elemento.apellido;
                Parametros.nombre = elemento.nombre;
                Parametros.telefono = elemento.telefono; ;
            }
            else
            {
                MessageBox.Show("El Telefono no Fue Localizado");
                cancelarBajas();
            }
        }
        public void buscarLocalCambios()
        {
            if (conector.State != ConnectionState.Open)
            {
                conector.Open();
            }
            if (!txtTelefonoCambios.Text.Equals(""))
            {
                MySqlCommand ejecutador = conector.CreateCommand();
                ejecutador.CommandText = "select *from datos where telefono='" + txtTelefonoCambios.Text + "'";
                MySqlDataReader captura = ejecutador.ExecuteReader();
                if (captura.Read())
                {
                    txtNombreCambios.Text = captura.GetString(1);
                    txtApellidoCambios.Text = captura.GetString(2);
                    telefonoModificar = captura.GetString(3);
                    nombreModificar = captura.GetString(1);
                    apellidoModificar = captura.GetString(2);

                }
                else
                {
                    MessageBox.Show("Telefono no Localizado");
                }
            }
            else
            {
                MessageBox.Show("Favor de introducir un Telefono");
            }
            conector.Close();
        }
        public void buscarRemotoCambios()
        {
            string URL = "http://localhost/EjemploMysql/Buscar.php";
            WebClient webClient = new WebClient();

            NameValueCollection formData = new NameValueCollection();
            formData["telefono"] = txtTelefonoCambios.Text;

            byte[] responseBytes = webClient.UploadValues(URL, "POST", formData);
            string json = Encoding.UTF8.GetString(responseBytes);
            webClient.Dispose();
            if (!json.Equals("[]"))
            {
                listaDatos resp = JsonConvert.DeserializeObject<listaDatos>(json);
                Dato elemento = resp.datos[0];

                txtNombreCambios.Text = elemento.nombre;
                txtApellidoCambios.Text = elemento.apellido;
                Parametros.nombre = elemento.nombre;
                Parametros.telefono = elemento.telefono;

            }
            else
            {
                MessageBox.Show("El Telefono no Fue Localizado");
                cancelarCambios();
            }
        }
        public void buscarLocalConsultas()
        {
            if (conector.State != ConnectionState.Open)
            {
                conector.Open();
            }
            DataTable dtDatos = new DataTable();
            MySqlDataAdapter mdaDatos = new MySqlDataAdapter("select nombre as Nombre, apellido as Apellido, telefono as Telefono from datos where telefono like '"+txtTelefonoConsultas.Text+"%'",conector);
            mdaDatos.Fill(dtDatos);
            tablaConsultas.DataSource = dtDatos;
            conector.Close();
        }
        public void buscarRemotoConsultas()        {
            string URL = "http://localhost/EjemploMysql/Consultas.php";
            WebClient webClient = new WebClient();

            NameValueCollection formData = new NameValueCollection();
            formData["telefono"] = txtTelefonoConsultas.Text;
            byte[] responseBytes = webClient.UploadValues(URL, "POST", formData);
            string json = Encoding.UTF8.GetString(responseBytes);
            DataTable tabla=new DataTable();
            tabla.Columns.Add("Nombre");
            tabla.Columns.Add("Apellido");
            tabla.Columns.Add("Telefono");
            if (!json.Equals("[]"))
            {
                webClient.Dispose();
                listaDatos resp = JsonConvert.DeserializeObject<listaDatos>(json);                
               
                for (int i = 0; i < resp.datos.Count;i++ )
                {
                    Dato elemento = resp.datos[i];
                    DataRow renglon = tabla.NewRow();
                    renglon["Nombre"] = elemento.nombre;
                    renglon["Apellido"] = elemento.apellido;
                    renglon["telefono"] = elemento.telefono;
                    tabla.Rows.Add(renglon);

                }
            }
            tablaConsultas.DataSource = tabla;
           
        }
        public void eliminarLocalBajas()
        {
            if (conector.State != ConnectionState.Open)
            {
                conector.Open();
            }
            String telefono = txtTelefonoBajas.Text;
            String nombre = txtNombreBajas.Text;
            String apellido = txtApellidoBajas.Text;
            if (telefono.Equals("") || apellido.Equals("") || nombre.Equals(""))
            {
                MessageBox.Show("Favor de Buscar un Telefono Existente");
            }
            else
            {
                MySqlCommand comando = conector.CreateCommand();
                comando.CommandText = "delete from datos where telefono='"+telefono+"' and nombre='"+nombre+"' and apellido='"+apellido+"';";
                comando.ExecuteNonQuery();
                conector.Close();
                cancelarBajas();
            }
        }
        public void eliminarRemotoBajas()
        {
            string URL = "http://localhost/EjemploMysql/Eliminar.php";
            WebClient webClient = new WebClient();

            NameValueCollection formData = new NameValueCollection();
            formData["telefonoEliminar"] = txtTelefonoBajas.Text;
            formData["nombreEliminar"] = txtNombreBajas.Text;

            byte[] responseBytes = webClient.UploadValues(URL, "POST", formData);
            
            webClient.Dispose();
            cancelarBajas();
        }
        public void modificarLocalCambios()
        {
            if (conector.State != ConnectionState.Open)
            {
                conector.Open();
            }
            String nombre=txtNombreCambios.Text;
            String apellido=txtApellidoCambios.Text;
            String telefono=txtTelefonoCambios.Text;
            if (telefonoModificar.Equals("") || nombreModificar.Equals("") || apellidoModificar.Equals("") || txtTelefonoCambios.Text.Equals(""))
            {
                MessageBox.Show("Favor de Realizar una busqueda");
            }
            else
            {
                MySqlCommand comando = conector.CreateCommand();
                comando.CommandText = "update datos set nombre='"+nombre+"', apellido='"+apellido+"', telefono='"
                    +telefono+"' where telefono='"+telefonoModificar+"' and nombre='"+nombreModificar+"' and apellido='"+apellidoModificar+"';";
                comando.ExecuteNonQuery();
                conector.Close();
                cancelarCambios();
            }
        }
        public void modificarRemotoCambios()
        {
            string URL = "http://localhost/EjemploMysql/Modificar.php";
            WebClient webClient = new WebClient();

            NameValueCollection formData = new NameValueCollection();
            formData["nombre"] = txtNombreCambios.Text;
            formData["apellido"] = txtApellidoCambios.Text;
            formData["telefono"] = txtTelefonoCambios.Text;
            formData["telefonoModificar"] = Parametros.telefono;
            formData["nombreModificar"] =Parametros.nombre;
            byte[] responseBytes = webClient.UploadValues(URL, "POST", formData);

            webClient.Dispose();
            cancelarCambios();
        }
        public void cancelarAltas()
        {
            txtNombreAltas.Text = "";
            txtApellidoAltas.Text = "";
            txtTelefonoAltas.Text = "";
        }
        public void cancelarBajas()
        {
            txtNombreBajas.Text = "";
            txtApellidoBajas.Text = "";
            txtTelefonoBajas.Text = "";
            Parametros.telefono = "";
            Parametros.nombre = "";
        }
        public void cancelarCambios()
        {
            txtNombreCambios.Text = "";
            txtApellidoCambios.Text = "";
            txtTelefonoCambios.Text = "";
            telefonoModificar = "";
            nombreModificar = "";
            apellidoModificar = "";
            Parametros.telefono = "";
            Parametros.nombre = "";
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            cancelarAltas();
        }

        private void btnGrabar_Click(object sender, EventArgs e)
        {
            if(lblConexion.Text.Equals("Local")){                
                grabarLocal();
            }else if(lblConexion.Text.Equals("Remoto")){
                grabarRemoto();
            }
        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            if (lblConexion.Text.Equals("Local"))
            {
                buscarLocalBajas();
            }
            else if (lblConexion.Text.Equals("Remoto"))
            {
                buscarRemotoBajas();
            }
        }

        private void btnCancelarBajas_Click(object sender, EventArgs e)
        {
            cancelarBajas();
        }

        private void btnGrabarBajas_Click(object sender, EventArgs e)
        {
            if (lblConexion.Text.Equals("Local"))
            {
                eliminarLocalBajas();
            }
            else if (lblConexion.Text.Equals("Remoto"))
            {
                eliminarRemotoBajas();
            }
        }

        private void btnBuscarCambios_Click(object sender, EventArgs e)
        {
            if (lblConexion.Text.Equals("Local"))
            {
                buscarLocalCambios();
            }
            else if (lblConexion.Text.Equals("Remoto"))
            {
                buscarRemotoCambios();
            }
        }

        private void btnCancelarCambios_Click(object sender, EventArgs e)
        {
            cancelarCambios();

        }

        private void btnGrabarCambios_Click(object sender, EventArgs e)
        {
            if (lblConexion.Text.Equals("Local"))
            {
                modificarLocalCambios();
            }
            else if (lblConexion.Text.Equals("Remoto"))
            {
                modificarRemotoCambios();
            }

        }

        private void txtTelefonoConsultas_TextChanged(object sender, EventArgs e)
        {
            if (lblConexion.Text.Equals("Local"))
            {
                buscarLocalConsultas();
            }
            else if (lblConexion.Text.Equals("Remoto"))
            {
                buscarRemotoConsultas();
            }

        }

        private void nuevoUsuarioToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            new NuevoUsuario().Show();
        }

        private void eliminarUsuarioToolStripMenuItem_Click(object sender, EventArgs e)
        {
            new EliminarUsuarios().Show();
        }

        private void tablaConsultas_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {

        }

      
    }
}
