package com.example.acer.agendita_mysql_c;

import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.ContentValues;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AppCompatActivity;

import android.database.Cursor;
import android.os.AsyncTask;

import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Switch;
import android.widget.Toast;

import librerias.MiBaseDatos;
import librerias.Parametros;


public class InicioActivity extends AppCompatActivity  implements  OnClickListener{

    Button btnAcceso;
    Switch switchServidor;
    View layout;
    EditText txtPasswordServidor,txtUsuario,txtPassword;
    EditText cajaNombreServidor;
    String nombreServidor="";

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_inicio);
        btnAcceso=(Button)findViewById(R.id.btnAcceso);
        switchServidor=(Switch)findViewById(R.id.switchServidor);
        txtPassword=(EditText)findViewById(R.id.txtPassword);
        txtUsuario=(EditText)findViewById(R.id.txtUsuario);
        btnAcceso.setOnClickListener(this);
        switchServidor.setOnClickListener(this);
        verifcarConexion();
        cargarServidor();

    }
    public void onClick(View v) {
        if(v.getId()==R.id.btnAcceso){
            new TareaAsincrona(this).execute();
            Parametros.conexion=switchServidor.getText().toString();
        }else if(v.getId()==R.id.switchServidor){
            if (switchServidor.isChecked()){
                verificarAdministrador();
            }else{
                switchServidor.setText("Local");
                grabarConexion("Local");
            }
        }
    }
    public void cargarServidor(){
        MiBaseDatos baseDatos=new MiBaseDatos(getApplicationContext());
        SQLiteDatabase sql=baseDatos.getReadableDatabase();
        String[] columnas={Parametros.campo_nombreServidor};
        Cursor cursor=sql.query(Parametros.tabla_servidor,columnas,null,null,null,null,null);
        if (cursor.getCount() != 0) {
            cursor.moveToFirst();
            nombreServidor=cursor.getString(cursor.getColumnIndex(Parametros.campo_nombreServidor));
            Parametros.servidor=nombreServidor;

        }
        sql.close();
    }
    public void verifcarConexion(){
        cargarServidor();
        MiBaseDatos baseDatos=new MiBaseDatos(getApplicationContext());
        SQLiteDatabase sql=baseDatos.getReadableDatabase();
        String[] columnas={Parametros.campo_nombreConexion};
        Cursor cursor=sql.query(Parametros.tabla_conexion,columnas,null,null,null,null,null);
        if(cursor.getCount()!=0){
            cursor.moveToFirst();
            Parametros.conexion=cursor.getString(cursor.getColumnIndex(Parametros.campo_nombreConexion));
            switchServidor.setText(cursor.getString(cursor.getColumnIndex(Parametros.campo_nombreConexion)));
                if(switchServidor.getText().equals("Remoto")){
                switchServidor.setChecked(true);
            }
            }
        sql.close();
    }
    public void grabarConexion(String conexion){
        MiBaseDatos baseDatos=new MiBaseDatos(getApplicationContext());
        SQLiteDatabase sql=baseDatos.getWritableDatabase();
        ContentValues contenido=new ContentValues();
        contenido.put(Parametros.campo_nombreConexion,conexion);
        sql.delete(Parametros.tabla_conexion,null,null);
        sql.insert(Parametros.tabla_conexion,null,contenido);
        sql.close();
    }
    public String buscarPassword(String usuario, String pass){
        String respuesta="Limitado";
            MiBaseDatos baseDatos=new MiBaseDatos(getApplicationContext());
            SQLiteDatabase sql=baseDatos.getReadableDatabase();
            String[] columnas={Parametros.campo_usuario,Parametros.campo_password,Parametros.campo_tipo};
            String clausula=Parametros.campo_usuario+"='"+usuario+"' and "+
                    Parametros.campo_password+"='"+pass+"'";
            Cursor cursor=sql.query(Parametros.tabla_usuarios,columnas,clausula,null,null,null,null);
            if(cursor.getCount()!=0){
                cursor.moveToFirst();
                respuesta=cursor.getString(cursor.getColumnIndex(Parametros.campo_tipo));
            }else{
                respuesta="null";
            }
            sql.close();
        return respuesta;
    }
    public void verificarServidor(){
        final MiBaseDatos baseDatos=new MiBaseDatos(getApplicationContext());


        LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        layout = inflater.inflate(R.layout.dialogo_nombre_servidor, (ViewGroup) findViewById(R.id.dialogoNombreServidor));
        cajaNombreServidor = (EditText) layout.findViewById(R.id.cajaNombreServidor);
        cajaNombreServidor.setText(nombreServidor);
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("Nombre del Servidor");
        builder.setView(layout);
        final String finalNombreServidor = nombreServidor;
        builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int whichButton) {

            }
        });

        builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                SQLiteDatabase sql=baseDatos.getWritableDatabase();
                ContentValues contenido=new ContentValues();
                contenido.put(Parametros.campo_nombreServidor,cajaNombreServidor.getText().toString());
                String consultas=Parametros.campo_nombreServidor+"='"+ nombreServidor+"'";
                sql.update(Parametros.tabla_servidor,contenido,consultas,null);
                sql.close();
                switchServidor.setChecked(true);
                switchServidor.setText("Remoto");
                Parametros.conexion="Remoto";
                grabarConexion("Remoto");
                Parametros.servidor=nombreServidor;

            }
        });
        AlertDialog passwordDialog = builder.create();
        passwordDialog.show();
    }
    public void verificarAdministrador(){
        LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        layout = inflater.inflate(R.layout.password_dialog, (ViewGroup) findViewById(R.id.root));
        txtPasswordServidor = (EditText) layout.findViewById(R.id.EditText_Pwd1);

        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("Contraseña Administrador");
        builder.setView(layout);
        builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int whichButton) {

            }
        });

        builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                if(buscarPassword("Admin", txtPasswordServidor.getText().toString()).equals("Admin")) {
                    verificarServidor();
                   }else {
                    switchServidor.setChecked(false);
                    switchServidor.setText("Local");
                    Parametros.conexion="Local";
                    grabarConexion("Local");
                }

            }
        });
        AlertDialog passwordDialog = builder.create();
      passwordDialog.show();
    }
    public void ingresar(){
        String tipo=buscarPassword(txtUsuario.getText().toString(),txtPassword.getText().toString());
        Log.d("Tipo de Usuario:",tipo);
      if(tipo.equals("Admin")) {
          Parametros.tipoUsuario=tipo;
          Intent miIntento = new Intent(getApplicationContext(), PrincipalActivity.class);
          startActivity(miIntento);
          this.finish();
      }else if(tipo.equals("Limitado")){
          Parametros.tipoUsuario=tipo;
          Intent miIntento = new Intent(getApplicationContext(), PrincipalActivity.class);
          startActivity(miIntento);
          this.finish();
      }else{
          Toast.makeText(getApplicationContext(),"Usuario y/o Contraseña Incorrectos",Toast.LENGTH_LONG).show();
          txtUsuario.setText("");
          txtPassword.setText("");
      }
    }
    private class TareaAsincrona extends AsyncTask<Void, Void, String> {
        private ProgressDialog nDialog;
        String boton;
        public TareaAsincrona(InicioActivity activity){
            nDialog = new ProgressDialog(activity); //Here I get an error: The constructor ProgressDialog(PFragment) is undefined

        }
        @Override
        protected String doInBackground(Void... voids) {
            try {
                Thread.sleep(3000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return null;
        }

        protected void onPreExecute() {
            nDialog.show();
            nDialog.setContentView(R.layout.dialogo_verificando);
            //ingresar();

        }

        protected void onPostExecute(String result) {
            super.onPostExecute(result);

            if (nDialog.isShowing()) {
                nDialog.dismiss();
                ingresar();
            }
        }
    }
}

