<?php

namespace App\Http\Controllers;

use Illuminate\Support\Facades\Crypt;
use Illuminate\Http\Request;
use Validator;
use DB;
use Captcha;

class usuarioController extends Controller
{
    function iniciar(Request $R){
        
        if($R->isMethod('post')){
           

            $usuario = strtoupper($R->input('usuario'));
            $clave = $R->input('clave');

            if (empty($usuario)) {
                $usuario = $R->input('usuarioa');
            }

            $verificar = DB::select("SELECT * FROM usuario WHERE usuario = ?",[$usuario]);
            if (!empty($verificar[0])){
                if (Crypt::decrypt($verificar[0]->clave) == $clave) {
                    if ($verificar[0]->estatus == 1) {
                        if ($verificar[0]->privilegio == 1) {

                            //USUARIO NORMAL
                            DB::update('UPDATE usuario SET sesion = ? WHERE id = ?', [date('Y-m-d H:i:s'), $verificar[0]->id]);

                            $R->session()->put('id_usuario', $verificar[0]->id);
                            $R->session()->put('usuario', $verificar[0]->usuario);
                            $R->session()->put('privilegio', $verificar[0]->privilegio);
                            $R->session()->put('root', $verificar[0]->root);
    
                            notify()->success('Bienvenido al sistema '.$verificar[0]->usuario.'.');
                            return redirect()->route('principal');
                        } else if ($verificar[0]->privilegio == 2){

                            //USUARIO ADMINISTRADOR
                            DB::update('UPDATE usuario SET sesion = ? WHERE id = ?', [date('Y-m-d H:i:s'), $verificar[0]->id]);

                            $R->session()->put('id_usuario', $verificar[0]->id);
                            $R->session()->put('usuario', $verificar[0]->usuario);
                            $R->session()->put('privilegio', $verificar[0]->privilegio);
                            $R->session()->put('root', $verificar[0]->root);
    
                            notify()->success('Bienvenido al sistema '.$verificar[0]->usuario.'.');
                            return redirect()->route('principal');
                        }

                        
                    } else {
                        notify()->error('El Usuario se encuentra bloqueado por favor contactase con soporte técnico.');
                        return redirect()->route('index');
                    }
                } else {
                    notify()->error('Usuario o Contraseña son invalidos.');
                    return redirect()->route('index');
                }
                
            } else {
                notify()->error('Usuario o Contraseña son invalidos.');
                return redirect()->route('index');
            }
        }

    }
    

    function registro(Request $request){
        //if($R->isMethod('post')){

            $validator = Validator::make($request->all(), [
                'cedula' => 'required',
                'nombre' => 'required',
                'clave' => 'required',
                'rclave' => 'required',
                'correo' => 'required|email',
                'pregunta1' => 'required',
                'respuesta1' => 'required',
                'captcha' => 'required|captcha'
            ],
            [
                'cedula.required' => 'Cédula/Rif Requerido.',
                'nombre.required' =>'Nombre y Apellido Requerido.',
                'clave.required' =>'Contraseña Requerido.',
                'rclave.required' => 'Repita la Contraseña.',
                'correo.required' =>'Correo Requerido.',
                'correo.email' =>'Correo erroneo.',
                'pregunta1.required' => 'Pregunta Requerida.',
                'respuesta1.required' =>'Respueta Requerida.',
                'captcha.required' => 'Captcha Requerida.',
                'captcha.captcha' => 'Error de captcha.'
            ]);

            $cedula = $request->input('cedula');
            $nombre = $request->input('nombre');
            $clave = $request->input('clave');
            $rclave = $request->input('rclave');
            $correo = $request->input('correo');
            $pregunta1 = $request->input('pregunta1');
            $respuesta1 = $request->input('respuesta1');


            if ($validator->passes()) {

                if($clave != $rclave){
                    $validator->getMessageBag()->add('password', 'Las contraseñas no concuerdan');

                    return response()->json(['error'=>$validator->errors()->all()]);
                } else {

                    $verificar = DB::select("SELECT * FROM usuario WHERE usuario = ?",[$cedula]);
                    if (!empty($verificar[0])){
                        
                        $validator->getMessageBag()->add('password', 'El usuario ya se encuentra registrado');

                        return response()->json(['error'=>$validator->errors()->all()]);
                    } else {
                        DB::insert("INSERT INTO usuario (usuario, clave, nombre, p1, r1, correo, registro, privilegio, estatus) VALUES (?,?,?,?,?,?,?,?,?)", [$cedula, Crypt::encrypt($clave), strtoupper($nombre), $pregunta1, $respuesta1, strtoupper($correo), date('Y-m-d H:i:s'), 1, 1]);

                        $persona = DB::select("SELECT * FROM persona WHERE cedula = ?",[$cedula]);

                        if (empty($persona[0])){
                            DB::insert("INSERT INTO persona (cedula, nombre, correo) VALUES (?,?,?)", [$cedula, strtoupper($nombre), strtoupper($correo)]);
                        } else {
                            DB::update('UPDATE persona SET correo = ? WHERE id = ?', [strtoupper($correo), $persona[0]->id]);
                        }
                    }

                    return response()->json(['success'=>'Added new records.']);
                }

            }

            return response()->json(['error'=>$validator->errors()->all()]);
    }

    function buscarcedula(Request $R, $id){
        $usuario = DB::select('SELECT * FROM usuario WHERE usuario = ?', [$id]);

        if (!empty($usuario[0])){
            echo json_encode(array("estatus" => '404'));
        } else {
            $cedula = explode('-', $id);

            //NO EXISTE
            $url = "http://www.cne.gob.ve/web/registro_electoral/ce.php?nacionalidad=".$cedula[0]."&cedula=".$cedula[1];

            $ch = curl_init();
            curl_setopt($ch,CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_REFERER,'http://www.cne.gob.ve/');
            curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0 (X11; Linux i686; rv:32.0) Gecko/20100101 Firefox/32.0');
            curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE);
            curl_setopt($ch,CURLOPT_FRESH_CONNECT,TRUE);
            curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,5);
            curl_setopt($ch,CURLOPT_TIMEOUT,10);
            $html=curl_exec($ch);

            if($html==false){
                $m=curl_error(($ch));
                error_log($m);
                curl_close($ch);
                //$j['error'] = 'SI';
                //$j['descripcion'] = $m;

                $j['error'] = 'SI';
                $j['cedula'] = $cedula[0].'-'.$cedula[1];
                $j['nombre'] = '';
                $j['telefono'] = '';
                $j['ids'] = '';
                $j['correo'] = '';

                echo json_encode(array("estatus" => '200', 'cedula' => $cedula[0].'-'.$cedula[1], 'nombre' => ''));
                return;
            } else {
                curl_close($ch);
                if (strpos($html, '<b>DATOS DEL ELECTOR</b>') > 0) {
                    $modo = 1; # Puede Votar
                } else if (strpos($html, '<strong>DATOS PERSONALES</strong>') > 0) {
                    $modo = 2; # No Puede Votar
                } else {
                    $modo = -1;

                    $j['error'] = 'SI';
                    $j['cedula'] = $cedula[0].'-'.$cedula[1];
                    $j['nombre'] = '';
                    $j['telefono'] = '';
                    $j['ids'] = '';
                    $j['correo'] = '';


                    echo json_encode(array("estatus" => '200', 'cedula' => $cedula[0].'-'.$cedula[1], 'nombre' => ''));
                }
                
                $j['error'] = 'NO';
                $j["descripcion"] = "/cne/elector";
                $j['modo'] = $modo;

                $j['zon'] = '0';
                $j['com'] = 0;

                // Datos para un elector que puede votar
                if ($j['modo'] == 1) {
                    #Obtener Cédula
                    $npos = strpos($html, 'align="left">', strpos($html, 'dula:')) + 13;
                    $j['cedula'] = trim(substr($html, ($npos), (strpos($html, '<', ($npos)) - ($npos))));
                    #Obtener Nombre
                    $npos = strpos($html, 'align="left"><b>', strpos($html, 'Nombre:')) + 16;
                    $j['nombre'] = trim(substr($html, ($npos), (strpos($html, '<', ($npos)) - ($npos))));
                    #Obtener Estado
                    $npos = strpos($html, 'align="left">', strpos($html, 'Estado:')) + 13;
                    $j['estado'] = trim(substr($html, ($npos), (strpos($html, '<', ($npos)) - ($npos))));
                    #Obtener Municipio
                    $npos = strpos($html, 'align="left">', strpos($html, 'Municipio:')) + 13;
                    $j['municipio'] = trim(substr($html, ($npos), (strpos($html, '<', ($npos)) - ($npos))));
                    #Obtener Parroquia
                    $npos = strpos($html, 'align="left">', strpos($html, 'Parroquia:')) + 13;
                    $j['parroquia'] = trim(substr($html, ($npos), (strpos($html, '<', ($npos)) - ($npos))));

                    $j['telefono'] = '';
                    echo json_encode(array("estatus" => '200', 'cedula' => trim(substr($html, ($npos), (strpos($html, '<', ($npos)) - ($npos)))), 'nombre' => $j['nombre']));
                }
                // Datos para un elector con objeción
                else if ($j['modo'] == 2) {
                    #Obtener Cédula
                    $npos = strpos($html, 'strong> ', strpos($html, 'dula:')) + 8;
                    $j['cedula'] = trim(substr($html, ($npos), (strpos($html, '<', ($npos)) - ($npos))));
                    #Obtener Nombre
                    $npos = strpos($html, 'strong> ', strpos($html, 'Primer Nombre:')) + 8;
                    $j['nombre'] = trim(substr($html, ($npos), (strpos($html, '<', ($npos)) - ($npos))));
                    #Obtener Nombre
                    $npos = strpos($html, 'strong> ', strpos($html, 'Segundo Nombre:')) + 8;
                    $j['nombre'] .= " " . trim(substr($html, ($npos), (strpos($html, '<', ($npos)) - ($npos))));
                    #Obtener Apellido
                    $npos = strpos($html, 'strong> ', strpos($html, 'Primer Apellido:')) + 8;
                    $j['nombre'] .= " " . trim(substr($html, ($npos), (strpos($html, '<', ($npos)) - ($npos))));
                    #Obtener Apellido
                    $npos = strpos($html, 'strong> ', strpos($html, 'Segundo Apellido:')) + 8;
                    $j['nombre'] .= " " . trim(substr($html, ($npos), (strpos($html, '<', ($npos)) - ($npos))));
                    #Obtener Estatus
                    $npos = strpos($html, '<td>', strpos($html, 'ESTATUS')) + 4;
                    $j['estatus'] = trim(substr($html, ($npos), (strpos($html, '<', ($npos)) - ($npos))));

                    $j['telefono'] = '';
                    echo json_encode(array("estatus" => '200', 'cedula' => trim(substr($html, ($npos), (strpos($html, '<', ($npos)) - ($npos)))), 'nombre' => $j['nombre']));
                }
            }
        }
    }

    public function recuperar(Request $request)
    {
        if($request->isMethod('post')){
            $usuario = $request->input('usuario');
            return redirect()->route('recuperar1', $usuario);
        }

        $datos = [];
        return view('recuperar', $datos);
    }

    public function recuperar1(Request $request, $id)
    {

        //$usuario = $request->input('usuario');
        $usuario1 = DB::select('SELECT * FROM usuario WHERE usuario = ?', [$id]);

        if (!empty($usuario1[0])){
            $datos = array();
            $datos[] = ['ID' => '01', 'NOMBRE' => '¿CUÁL ES EL APELLIDO DE SOLTERA DE TU MADRE?'];
            $datos[] = ['ID' => '02', 'NOMBRE' => '¿CUÁL ERA EL NOMBRE DE TU PRIMERA ESCUELA?'];
            $datos[] = ['ID' => '03', 'NOMBRE' => '¿CUÁL ES TÚ SUPERHÉROE FAVORITO?'];
            $datos[] = ['ID' => '04', 'NOMBRE' => '¿CUÁL ES EL NOMBRE DE TU PRIMERA MASCOTA?'];
            $datos[] = ['ID' => '05', 'NOMBRE' => '¿CUÁL ERA SU LUGAR FAVORITO CUANDO ERA UN NIÑO?'];
            $datos[] = ['ID' => '06', 'NOMBRE' => '¿QUIÉN ES TÚ PERSONAJE FAVORITO DE DIBUJOS ANIMADOS?'];
            $datos[] = ['ID' => '07', 'NOMBRE' => '¿CUÁL FUE EL PRIMER VIDEOJUEGO QUE JUGASTE?'];
            $datos[] = ['ID' => '08', 'NOMBRE' => '¿CUÁL ERA EL NOMBRE DE SU PRIMER MAESTRO DE INFANCIA?'];
            $datos[] = ['ID' => '09', 'NOMBRE' => '¿CUÁL FUE SU PROGRAMA DE TELEVISIÓN FAVORITO?'];
            $datos[] = ['ID' => '10', 'NOMBRE' => '¿EN QUÉ CIUDAD NACIÓ TÚ MADRE/PADRE?'];
            $datos[] = ['ID' => '11', 'NOMBRE' => '¿CUÁL ES EL NOMBRE DE TÚ PRIMERA PAREJA?'];
            $datos[] = ['ID' => '12', 'NOMBRE' => '¿CUÁL ES TÚ COLOR FAVORITO?'];
            $datos[] = ['ID' => '13', 'NOMBRE' => '¿QUE ANIMAL TE GUSTA?'];
            $datos[] = ['ID' => '14', 'NOMBRE' => '¿CUÁL ES TU COMIDA FAVORITA?'];

            $pregunta = "";

            foreach ($datos as $key => $value) {
                if ($value['ID'] == $usuario1[0]->p1) {
                    $pregunta = $value['NOMBRE'];
                }
            }

            $datos = [
                'usuario' => $usuario1[0],
                'pregunta' => $pregunta
            ];

            //dd($datos);

            return view('recuperar', $datos);

        } else {
            notify()->error('El usuario no se encuentra registrado');
            return redirect()->route('index');
        }
    }

    function recuperar2(Request $request){
        if($request->isMethod('post')){
            $usuario = $request->input('usuario');
            $clave = $request->input('clave');
            $rclave = $request->input('rclave');
            $pregunta = $request->input('respuesta');

            $code = $request->input('captcha');
            $re = Captcha::check($code);

            $verificar = DB::select("SELECT * FROM usuario WHERE usuario = ?",[$usuario]);
            if (!empty($verificar[0])){
                if ($verificar[0]->r1 == $pregunta) {
                    if ($clave == $rclave) {
                        if ($re) {
                            DB::update('UPDATE usuario SET clave = ? WHERE id = ?', [Crypt::encrypt($clave), $verificar[0]->id]);
                            
                            notify()->success('La contraseña ha sido restaurada exitosamente');
                            return redirect()->route('index');
                        } else {
                            notify()->error('La captcha es erronea');
                            return redirect()->route('recuperar1', $usuario);
                        }
                    } else {
                        notify()->error('La Contraseña no concuerdan');
                        return redirect()->route('recuperar1', $usuario);
                    }
                } else {
                    notify()->error('La respuesta de seguridad es incorrecta');
                    return redirect()->route('recuperar1', $usuario);
                }
            } else {
                notify()->error('Usuario no ha sido registrado en SIREMI');
                return redirect()->route('recuperar1', $usuario);
            }
        } 
    }

    function cerrar_sesion(Request $request){
        $request->session()->flush();
        notify()->success('Cierre de sesión exitosamente');
        return redirect()->route('index');
    }
}
