<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Crypt;
use DB;

class perfilController extends Controller
{
    public $perfil = true;

    function perfilUsuario(Request $request)
    {
        $usuario = $request->session()->get('usuario');
        $privilegio = $request->session()->get('privilegio');

        $usuario1 = DB::select("SELECT * FROM usuario WHERE usuario = ?",[$usuario]);

        $datos = array();

        $datos[] = ['ID' => 1, 'NOMBRE' => '¿CUÁL ES EL APELLIDO DE SOLTERA DE TU MADRE?'];
        $datos[] = ['ID' => 2, 'NOMBRE' => '¿CUÁL ERA EL NOMBRE DE TU PRIMERA ESCUELA?'];
        $datos[] = ['ID' => 3, 'NOMBRE' => '¿CUÁL ES TÚ SUPERHÉROE FAVORITO?'];
        $datos[] = ['ID' => 4, 'NOMBRE' => '¿CUÁL ES EL NOMBRE DE TU PRIMERA MASCOTA?'];
        $datos[] = ['ID' => 5, 'NOMBRE' => '¿CUÁL ERA SU LUGAR FAVORITO CUANDO ERA UN NIÑO?'];
        $datos[] = ['ID' => 6, 'NOMBRE' => '¿QUIÉN ES TÚ PERSONAJE FAVORITO DE DIBUJOS ANIMADOS?'];
        $datos[] = ['ID' => 7, 'NOMBRE' => '¿CUÁL FUE EL PRIMER VIDEOJUEGO QUE JUGASTE?'];
        $datos[] = ['ID' => 8, 'NOMBRE' => '¿CUÁL ERA EL NOMBRE DE SU PRIMER MAESTRO DE INFANCIA?'];
        $datos[] = ['ID' => 9, '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?'];

        $datos = [
            'usuario' => !empty($usuario1[0]) ? $usuario1[0] : null,
            'pregunta' => Collection::make($datos)->pluck('NOMBRE','ID'),
            'privilegio' => $privilegio,
            'perfil' => $this->perfil
        ];


        return view('perfil.configuracion', $datos);
    }

    function perfilPersonal(Request $request)
    {
        $usuario = $request->session()->get('usuario');
        $privilegio = $request->session()->get('privilegio');

        $persona = DB::select("SELECT p.*, jf.direccion, jf.preferencia, jf.id_jefe_com FROM persona AS p INNER JOIN j_familia AS jf ON jf.id_persona = p.id WHERE cedula = ?",[$usuario]);
        $comunidad = DB::select('SELECT * FROM comunidad ORDER BY nombre ASC');
        $ocupacion = DB::select('SELECT * FROM ocupacion ORDER BY nombre ASC');

        $datos = [
            'persona' => !empty($persona[0]) ? $persona[0] : null,
            'comunidad' => Collection::make($comunidad)->pluck('nombre','id'),
            'ocupacion' => Collection::make($ocupacion)->pluck('nombre','id'),
            'privilegio' => $privilegio,
            'perfil' => $this->perfil
        ];


        return view('perfil.personal', $datos);
    }

    function actualizar_usuario(Request $request)
    {
        if($request->isMethod('post')){
            $usuario = $request->session()->get('usuario');

            $pregunta1 = $request->input('pregunta1');
            $respuesta = $request->input('respuesta');

            $clave = $request->input('clave');
            $rclave = $request->input('rclave');

            $correo = $request->input('correo');

            $verificar = DB::select("SELECT * FROM usuario WHERE usuario = ?",[$usuario]);

            if (!empty($verificar[0])){
                $persona = DB::select("SELECT * FROM persona WHERE cedula = ?",[$usuario]);

                if ($clave == '' && $rclave == ''){
                    DB::update('UPDATE usuario SET p1 = ?, r1 = ?, correo = ? WHERE id = ?', [$pregunta1, $respuesta, strtoupper($correo), $verificar[0]->id]);

                    DB::update('UPDATE persona SET correo = ? WHERE id = ?', [strtoupper($correo), $persona[0]->id]);
                        
                    notify()->success('Los datos del usuario han sido actualizado exitosamente');
                    return redirect()->route('perfilUsuario');
                } else {
                    if ($clave == $rclave) {
                        DB::update('UPDATE usuario SET clave = ?, p1 = ?, r1 = ?, correo = ? WHERE id = ?', [Crypt::encrypt($clave), $pregunta1, $respuesta, strtoupper($correo), $verificar[0]->id]);

                        DB::update('UPDATE persona SET correo = ? WHERE id = ?', [strtoupper($correo), $persona[0]->id]);
                            
                        notify()->success('Los datos del usuario han sido actualizado exitosamente');
                        return redirect()->route('perfilUsuario');
                    } else {
                        notify()->error('La Contraseña no concuerdan');
                        return redirect()->route('perfilUsuario');
                    }
                }
            } else {
                notify()->error('Usuario no ha sido registrado en SIREMI');
                return redirect()->route('perfilUsuario');
            }
        } 
    }

    function datos_personales(Request $request){
        $usuario = $request->session()->get('usuario');

        if($request->isMethod('post')){
            $carnet = $request->input('carnet');
            $serial = $request->input('serial');
            $codigo = $request->input('codigo');

            $fecha1 = $request->input('fecha1');
            $sexo1 = $request->input('sexo1');
            $civil = $request->input('civil');
            $ocupacion1 = $request->input('ocupacion');
            $trabaja = $request->input('trabaja');
            $donde = $request->input('donde');
            $telefono = $request->input('telefono');
            $correo = $request->input('correo');
            $menor = $request->input('menor');

            //Direccion
            $comunidad1 = $request->input('comunidad');
            $direccion = $request->input('direccion');
            $referencia = $request->input('referencia');


            $datos_per = DB::select('SELECT p.*, jf.id_jefe_com, jf.direccion, jf.preferencia FROM persona AS p LEFT JOIN j_familia AS jf ON jf.id_persona = p.id WHERE p.cedula = ?', [$usuario]);

            $datos_us = DB::select('SELECT * FROM usuario WHERE usuario = ?', [$usuario]);

            if (!empty($datos_per[0])){
                $id_persona = $datos_per[0]->id;

                $ac = DB::update('UPDATE persona SET carnet = ?, serial = ?, codigo = ?, fn = ?, sexo = ?, estadocivil = ?, ocupacion = ?, trabaja = ?, donde = ?, telefono = ?, correo = ? WHERE id = ?', [$carnet, $serial, $codigo, $fecha1, $sexo1, $civil, $ocupacion1, $trabaja, strtoupper($donde), $telefono, strtoupper($correo), $id_persona]);

                DB::update('UPDATE usuario SET correo = ? WHERE id = ?', [strtoupper($correo), $datos_us[0]->id]);

                $jf = DB::select('SELECT * FROM j_familia WHERE id_persona = ?', [$id_persona]);
                $id_jefe_fa = 0;

                if (!empty($jf[0])){
                    $ac1 = DB::update('UPDATE j_familia SET direccion = ?, preferencia = ? WHERE id = ?', [strtoupper($direccion), strtoupper($referencia), $jf[0]->id]);

                    $id_jefe_fa = $jf[0]->id;
                } else {
                    DB::insert('INSERT INTO j_familia (id_persona, id_jefe_com, direccion, preferencia, propia, calle) VALUES (?, ?, ?, ?, ?, ?)', [$id_persona, $comunidad1, strtoupper($direccion), strtoupper($referencia), '', '']);

                    $id_jefe_fa = DB::getPdo()->lastInsertId();
                }
            }

            notify()->success('Información Personal guadada exitosamente');
            return redirect()->route('perfilPersonal');
        }
    }


    function grupo_familiar(Request $request)
    {
        $usuario = $request->session()->get('usuario');
        $datos_per = DB::select('SELECT jf.id, p.id AS id_persona FROM persona AS p INNER JOIN j_familia AS jf ON jf.id_persona = p.id WHERE p.cedula = ?', [$usuario]);

        $grupo_familiar = DB::select('SELECT gf.id_familia, gf.id_persona, p.cedula, p.nombre, gf.relacion, gf.jefe FROM grupo_familiar AS gf INNER JOIN persona AS p ON p.id = gf.id_persona WHERE gf.id_familia = ?', [$datos_per[0]->id]);

        if ($request->isMethod('post')) {
            DB::insert('INSERT INTO grupo_familiar (id_familia, id_persona, relacion, jefe) VALUES (?, ?, ?, ?)', [$datos_per[0]->id, $datos_per[0]->id_persona, 0, 1]);

            notify()->success('Asignado exitosamente como feje del grupo familiar');
            return redirect()->route('grupo_familiar');
        }

        $datos = [
            'perfil' => $this->perfil,
            'jefe' => $grupo_familiar,
        ];

        return view('perfil.familia', $datos);
    }

    function grupo_familiar_cedulado(Request $request)
    {
        if($request->isMethod('post')){
            $usuario = $request->input('usuario');
            $datos_us = DB::select('SELECT * FROM persona WHERE cedula = ?', [$usuario]);
            $ocupacion = DB::select('SELECT * FROM ocupacion ORDER BY nombre ASC');

            $gf = DB::select('SELECT * FROM grupo_familiar WHERE id_persona = ?', [!empty($datos_us[0]->id) ? $datos_us[0]->id : 0]);

            if (!empty($gf[0])) {
                notify()->error('La cédula '.$datos_us[0]->cedula.' ya se encuentra registrada en un grupo familiar');
                return redirect()->route('grupo_familiar');
            }

            $j['nombre'] = '';

            if (empty($datos_us[0])) {
                $cedula = explode('-', $usuario);

                //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['cedula'] = $cedula[0].'-'.$cedula[1];
                    $j['nombre'] = '';
                    $j['telefono'] = '';
                    $j['ids'] = '';
                    $j['correo'] = '';

                } 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'] = '';

                    }
                    
                    $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'] = '';
                    }
                    // 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'] = '';
                    }
                }
            }


            $datos = [
                'perfil' => $this->perfil,
                'ti' => 'Agregar Familia (Cedulado)',
                'persona' => !empty($datos_us[0]) ? $datos_us[0] : null,
                'ocupacion' => Collection::make($ocupacion)->pluck('nombre','id'),
                'cedula' => $usuario,
                'nombre' => $j['nombre']
            ];
            
            return view('perfil.add_familia_ced', $datos);
        } else {
            notify()->error('Error de acción');
            return redirect()->route('grupo_familiar');
        }
    }

    function grupo_familiar_nocedulado(Request $request)
    {

        if($request->isMethod('post')){
            $usuario = $request->input('usuario2');
            $nhijos = $request->input('nhijos');

            $datos_us = DB::select('SELECT * FROM persona AS p LEFT JOIN estudios AS e ON e.id_persona = p.id WHERE cedula = ?', [$usuario.'-'.$nhijos]);

            $gf = DB::select('SELECT * FROM grupo_familiar WHERE id_persona = ?', [!empty($datos_us[0]->id) ? $datos_us[0]->id : 0]);

            if (!empty($gf[0])) {
                notify()->error('La cédula '.$datos_us[0]->cedula.' ya se encuentra registrada en un grupo familiar');
                return redirect()->route('grupo_familiar');
            }

            //dd($datos_us);
            $datos = [
                'perfil' => $this->perfil,
                'ti' => 'Agregar Familia (No Cedulado)',
                'cedula' => $usuario.'-'.$nhijos,
                'persona' => !empty($datos_us[0]) ? $datos_us[0] : null,
            ];
            
            return view('perfil.add_familia_noced', $datos);
        } else {
            notify()->error('Error de acción');
            return redirect()->route('grupo_familiar');
        }
    }

    function guardar_cedulado_familia(Request $request)
    {
        if($request->isMethod('post')){
            $jj = $request->session()->get('usuario');

            $datos_per = DB::select('SELECT jf.id, p.id AS id_persona FROM persona AS p INNER JOIN j_familia AS jf ON jf.id_persona = p.id WHERE p.cedula = ?', [$jj]);

            $usuario = $request->input('usuario');
            $carnet = $request->input('carnet');
            $serial = !empty($request->input('serial')) ? $request->input('serial') : null;
            $codigo = !empty($request->input('codigo')) ? $request->input('codigo') : null;
            $nombre = $request->input('nombre');
            $fecha1 = $request->input('fecha1');
            $sexo1 = $request->input('sexo1');
            $civil = $request->input('civil');
            $ocupacion = $request->input('ocupacion');
            $telefono = $request->input('telefono');
            $correo = $request->input('correo');
            $trabaja = $request->input('trabaja');
            $donde = !empty($request->input('donde')) ? $request->input('donde') : null;

            $parentesco = $request->input('parentesco');

            $datos_us = DB::select('SELECT * FROM persona WHERE cedula = ?', [$usuario]);

            $id_persona = 0;

            if (!empty($datos_us[0])) {
                //EXISTENTE
                DB::update('UPDATE persona SET carnet = ?, serial = ?, codigo = ?, donde = ?, fn = ?, sexo = ?, estadocivil = ?, ocupacion = ?, trabaja = ?, telefono = ?, correo = ? WHERE id = ?', [$carnet, $serial, $codigo, strtoupper($donde), $fecha1, $sexo1, $civil, $ocupacion, $trabaja, $telefono, strtoupper($correo), $datos_us[0]->id]);

                $id_persona = $datos_us[0]->id;
            } else {
                //NO EXISTE
                DB::insert('INSERT INTO persona (cedula, nombre, carnet, serial, codigo, donde, fn, sexo, estadocivil, ocupacion, trabaja, telefono, correo, no_participar) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)', [$usuario, strtoupper($nombre), $carnet, $serial, $codigo, strtoupper($donde), $fecha1, $sexo1, $civil, $ocupacion, $trabaja, $telefono, strtoupper($correo), 0]);

                $id_persona = DB::getPdo()->lastInsertId();
            }

            $gf = DB::select('SELECT * FROM grupo_familiar WHERE id_persona = ?', [!empty($datos_us[0]->id) ? $datos_us[0]->id : 0]);

            if (!empty($gf[0])) {
                notify()->error('La cédula '.$datos_us[0]->cedula.' ya se encuentra registrada en un grupo familiar');
                return redirect()->route('grupo_familiar');
            }

            if ($id_persona > 0) {
                DB::insert('INSERT INTO grupo_familiar (id_familia, id_persona, relacion, jefe) VALUES (?, ?, ?, ?)', [$datos_per[0]->id, $id_persona, $parentesco, 0]);

                notify()->success('La cédula '.$usuario.', ha sido asignado exitosamente como miembro del grupo familiar');
                return redirect()->route('grupo_familiar');
            } else {
                notify()->error('Error al guardar el miembro al grupo familiar. Intente más tarde');
                return redirect()->route('grupo_familiar');
            }

        }
    }

    function Eliminar_familia(Request $request)
    {
        $i_fa = $request->input('i_fa');
        $i_per = $request->input('i_per');

        DB::delete('DELETE FROM grupo_familiar WHERE id_familia = ? AND id_persona = ?', [$i_fa, $i_per]);

        notify()->success('Ha sido eliminado exitosamente');
        return redirect()->route('grupo_familiar');
    }

    function guardar_nocedulado_familia(Request $request)
    {
        if($request->isMethod('post')){
            $jj = $request->session()->get('usuario');

            $datos_per = DB::select('SELECT jf.id, p.id AS id_persona FROM persona AS p INNER JOIN j_familia AS jf ON jf.id_persona = p.id WHERE p.cedula = ?', [$jj]);
            
            $cedula = $request->input('cedula');
            $nombre = $request->input('nombre');
            $fecha1 = $request->input('fecha1');

            $sexo1 = $request->input('sexo1');
            $estudia = $request->input('estudia');
            $nivel = $request->input('nivel');

            $anio = $request->input('anio');
            $institucion = $request->input('institucion');
            $parentesco = $request->input('parentesco');

            $datos_us = DB::select('SELECT * FROM persona WHERE cedula = ?', [$cedula]);

            $id_persona = 0;

            if (!empty($datos_us[0])){
            //EXISTENTE
                DB::update('UPDATE persona SET fn = ?, sexo = ? WHERE id = ?', [$fecha1, $sexo1, $datos_us[0]->id]);

                $id_persona = $datos_us[0]->id;
            } else {
                //NO EXISTE
                DB::insert('INSERT INTO persona (cedula, nombre, fn, sexo, no_participar) VALUES (?,?,?,?,?)', [$cedula, strtoupper($nombre), $fecha1, $sexo1, 0]);

                $id_persona = DB::getPdo()->lastInsertId();
            }

            $estudios = DB::select('SELECT * FROM estudios WHERE id_persona = ?', [!empty($datos_us[0]->id) ? $datos_us[0]->id : 0]);

            if (!empty($estudios[0])){
                DB::update('UPDATE estudios SET estudia = ?, nivel = ?, institucion = ?, anio = ? WHERE id_persona = ?', [$estudia, !empty($nivel) ? $nivel : null, !empty(strtoupper($institucion)) ? strtoupper($institucion) : null, !empty($anio) ? $anio : null, $id_persona]);
            } else {
                DB::insert('INSERT INTO estudios (id_persona, estudia, nivel, institucion, anio) VALUES (?,?,?,?,?)', [$id_persona, $estudia, !empty($nivel) ? $nivel : null, !empty(strtoupper($institucion)) ? strtoupper($institucion) : null, !empty($anio) ? $anio : null]);
            }

            $gf = DB::select('SELECT * FROM grupo_familiar WHERE id_persona = ?', [!empty($datos_us[0]->id) ? $datos_us[0]->id : 0]);

            if (!empty($gf[0])) {
                notify()->error('La cédula '.$datos_us[0]->cedula.' ya se encuentra registrada en un grupo familiar');
                return redirect()->route('grupo_familiar');
            }

            if ($id_persona > 0) {
                DB::insert('INSERT INTO grupo_familiar (id_familia, id_persona, relacion, jefe) VALUES (?, ?, ?, ?)', [$datos_per[0]->id, $id_persona, $parentesco, 0]);

                notify()->success('La cédula '.$cedula.', ha sido asignado exitosamente como miembro del grupo familiar');
                return redirect()->route('grupo_familiar');
            } else {
                notify()->error('Error al guardar el miembro al grupo familiar. Intente más tarde');
                return redirect()->route('grupo_familiar');
            }

            //dd($request);
        }
        
    }
}
