<?php

namespace App\Http\Controllers;

use Illuminate\Support\Collection;
use Illuminate\Http\Request;
use DB;

class lentes_soliController extends Controller
{
    function buscar_datos(Request $request){
        $cedula = $request->input('cedula');
        $datos_per = DB::select('SELECT * FROM persona WHERE cedula = ?', [$cedula]);

        return json_encode($datos_per);
    }

    function lista(Request $request){
        $usuario = $request->session()->get('usuario');

        $datos_per = DB::select('SELECT p.cedula, p.nombre, ls.*, mp.cedula AS cedula_menor, mp.nombre AS nombre_menor FROM persona AS p INNER JOIN j_familia AS jf ON jf.id_persona = p.id INNER JOIN lentes_solicitud AS ls ON ls.id_solicitante = jf.id LEFT JOIN persona AS mp ON mp.id = ls.id_menor WHERE p.cedula = ?', [$usuario]);

        $datos = [
            'lentes' => true,
            'datos' => $datos_per
        ];

        return view('lentes.lista', $datos);
    }

    function registro_venapp(Request $request){
        $usuario = $request->session()->get('usuario');
        if($request->isMethod('post')){
            $iiiii = $request->input('iiiii');
            $venapp = $request->input('venapp');

            if ($venapp == '' || $iiiii == '') {
                notify()->error('Por favor debes de completar todo los datos');
                return redirect()->route('principal');
            } else {
                $nreporte = $request->input('nreporte');
                $nreporte = !empty($nreporte) ? $nreporte : '';

                DB::update('UPDATE lentes_solicitud SET app = ?, reporte = ? WHERE id = ?', [strtoupper($venapp), strtoupper($nreporte), $iiiii]);

                notify()->success('Actualizado exitosamente');
                return redirect()->route('principal');
            }
            
            
        }
        
    }

    function index(Request $request){
        $usuario = $request->session()->get('usuario');
        $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($request->isMethod('post')){

            //Datos Personales
            $cedula = $request->input('cedula');
            $carnet = $request->input('carnet');
            $serial = $request->input('serial');
            $codigo = $request->input('codigo');
            $nombre = $request->input('nombre');
            $fecha1 = $request->input('fecha1');
            $edad1 = $request->input('edad1');
            $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');

            //Menor de Edad
            $tipo = $request->input('tipo');
            $cedulam = $request->input('cedulam');
            $hijo = $request->input('hijo');
            $nombrem = $request->input('nombrem');
            $fecham = $request->input('fecham');
            $edad2 = $request->input('edad2');
            $sexom = $request->input('sexom');
            $relacion = $request->input('relacion');

            //Direccion
            $comunidad1 = $request->input('comunidad');
            $direccion = $request->input('direccion');
            $referencia = $request->input('referencia');

            //Ayuda
            $descricion = $request->input('descricion');

            $venapp = $request->input('venapp');
            $nreporte = $request->input('nreporte');

            if (!empty($datos_per[0])) {
                //Existente
                $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();
                }

                $id_menor = 0;

                if ($menor == 'SI') {

                    if ($tipo == '' || $cedulam == '' || $nombrem == '' || $fecham == '' || $sexom == '' || $relacion == '') {
                        notify()->error('Por favor debes de completar todo los datos del menor');
                        return redirect()->route('l_lentes');
                    }

                    if ($tipo == 'SC') {
                        if ($hijo == '') {
                            notify()->error('Por favor debes de completar todo los datos del menor');
                            return redirect()->route('l_lentes');
                        }

                        $menor1 = DB::select('SELECT * FROM persona WHERE cedula = ?', [$cedulam.'-'.$hijo]);
                        if (!empty($menor1[0])){
                            $id_menor = $menor1[0]->id;
                        } else {
                            DB::insert('INSERT INTO persona (cedula, nombre, fn, sexo) VALUES (?, ?, ?, ?)', [$cedulam.'-'.$hijo, strtoupper($nombrem), $fecham, $sexom]);

                            $id_menor = DB::getPdo()->lastInsertId();
                        }
                    } else {
                        $menor1 = DB::select('SELECT * FROM persona WHERE cedula = ?', [$tipo.'-'.$cedulam]);
                        if (!empty($menor1[0])){
                            $id_menor = $menor1[0]->id;
                        } else {
                            DB::insert('INSERT INTO persona (cedula, nombre, fn, sexo) VALUES (?, ?, ?, ?)', [$tipo.'-'.$cedulam, strtoupper($nombrem), $fecham, $sexom]);

                            $id_menor = DB::getPdo()->lastInsertId();
                        }
                    }
                }

                $ayu = DB::select('SELECT * FROM lentes_solicitud WHERE id_solicitante = ? AND menor = ? AND id_menor = ?', [$id_jefe_fa, $menor, $id_menor]);

                if (!empty($ayu)) {
                    //MENSAJE DE ERROR
                    notify()->error('Registro existente. Usted tiene una solicitud.');
                    return redirect()->route('l_lentes_lista');
                } else {
                    $rel = !empty($relacion) ? $relacion : '';
                    $nreporte = !empty($nreporte) ? $nreporte : '';

                    DB::insert('INSERT INTO lentes_solicitud (id_solicitante, menor, id_menor, relacion, descripcion, fecha_registro, fecha_estatus, estatus, estatus2, app, reporte) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)', [$id_jefe_fa, $menor, $id_menor, $rel, strtoupper($descricion), date('Y-m-d H:i:s'), date('Y-m-d H:i:s'), 'EN ANÁLISIS', 1, $venapp, strtoupper($nreporte)]);

                    notify()->success('Solicitud registrada exitosamente');
                    return redirect()->route('l_lentes_lista');
                }
            } else {
                //No Existente
            }
        }

        
        $comunidad = DB::select('SELECT * FROM comunidad ORDER BY nombre ASC');
        $ocupacion = DB::select('SELECT * FROM ocupacion ORDER BY nombre ASC');

        $hijos = array();
        $limite = 25;

        for ($i=0; $i < $limite; $i++) { 
            $hijos[$i+1] = $i + 1;
        }        

        $datos = [
            'lentes' => true,
            'cedula' => $usuario,
            'datosp' => $datos_per,
            'comunidad' => Collection::make($comunidad)->pluck('nombre','id'),
            'ocupacion' => Collection::make($ocupacion)->pluck('nombre','id'),
            'hijos' => $hijos
        ];

        return view('lentes.solicitud', $datos);
    }

    function admin_lentes(Request $request){
        $usuario = $request->session()->get('usuario');

        $usuarios = DB::select('SELECT count(id) AS total FROM usuario');
        
        $datos_p = DB::select('SELECT count(u.id) AS total FROM usuario AS u INNER JOIN persona AS p ON p.cedula = u.usuario INNER JOIN j_familia AS jf ON jf.id_persona = p.id');
        
        $solicitudes = DB::select('SELECT ls.* FROM usuario AS u INNER JOIN persona AS p ON p.cedula = u.usuario INNER JOIN j_familia AS jf ON jf.id_persona = p.id INNER JOIN lentes_solicitud AS ls ON ls.id_solicitante = jf.id');

        $solicitudes1 = DB::select('SELECT COUNT(ls.id) AS totales, DATE_FORMAT(ls.fecha_registro, "%Y-%m-%d") AS fecha FROM usuario AS u INNER JOIN persona AS p ON p.cedula = u.usuario INNER JOIN j_familia AS jf ON jf.id_persona = p.id INNER JOIN lentes_solicitud AS ls ON ls.id_solicitante = jf.id GROUP BY DATE_FORMAT(ls.fecha_registro, "%Y-%m-%d") ORDER BY ls.fecha_registro ASC LIMIT 30'); 

        $estatus = DB::select('SELECT COUNT(ls.id) AS totales, ls.estatus2 FROM usuario AS u INNER JOIN persona AS p ON p.cedula = u.usuario INNER JOIN j_familia AS jf ON jf.id_persona = p.id INNER JOIN lentes_solicitud AS ls ON ls.id_solicitante = jf.id GROUP BY ls.estatus'); 

        $comunidad = DB::select('SELECT COUNT(ls.id) AS totales, c.nombre FROM usuario AS u INNER JOIN persona AS p ON p.cedula = u.usuario INNER JOIN j_familia AS jf ON jf.id_persona = p.id INNER JOIN lentes_solicitud AS ls ON ls.id_solicitante = jf.id INNER JOIN comunidad As c ON c.id = jf.id_jefe_com WHERE ls.estatus2 = ? GROUP BY c.nombre ORDER BY c.nombre ASC', [1]);

        $esta['ANALISIS'] = 0;
        $esta['APROBADO'] = 0;
        $esta['DENEGADO'] = 0;

        $esta['VENAPP0'] = 0;
        $esta['VENAPPSI'] = 0;
        $esta['VENAPPNO'] = 0;

        foreach ($estatus as $key => $value) {
            if ($value->estatus2 == 1) {
                $esta['ANALISIS'] = $value->totales;
            } else if ($value->estatus2 == 2) {
                $esta['APROBADO'] = $value->totales;
            } else if ($value->estatus2 == 3) {
                $esta['DENEGADO'] = $value->totales;
            }
        }

        foreach ($solicitudes as $key => $value) {
            if ($value->app == '0') {
                $esta['VENAPP0'] = $esta['VENAPP0'] + 1;
            }

            if ($value->app == 'SI') {
                $esta['VENAPPSI'] = $esta['VENAPPSI'] + 1;
            }

            if ($value->app == 'NO') {
                $esta['VENAPPNO'] = $esta['VENAPPNO'] + 1;
            }
        }

        $datos = [
            'datos_p' => $datos_p[0]->total,
            'usuario' => $usuarios[0]->total,
            'solicitud' => $solicitudes, 
            'solicitudes1' => $solicitudes1,
            'estatus' => $esta,
            'comunidad' => $comunidad
        ];

        return view('reportes.lentes.estadisticas', $datos);
    }

    function analisis(Request $request){

        $resul = [];
        $sexo = '';
        
        if($request->isMethod('post')){
            $desde = $request->input('desde');
            $hasta = $request->input('hasta');

            $comunidad1 = $request->input('comunidad');
            $estatus = $request->input('estatus');

            $ocupacion1 = $request->input('ocupacion');
            $sexo = $request->input('sexo');
            $desdee = $request->input('desdee');
            $hastae = $request->input('hastae');

            $sql = '';

            if ($comunidad1 != 'T') {
                $sql .= ' AND c.id = '.$comunidad1;
            }

            if ($estatus == '4') {
                $sql .= ' AND ls.app = "SI" AND ls.estatus2 = 1';
            } else {
                $sql .= ' AND ls.estatus2 = 1';
            }

            if ($ocupacion1 != 'T') {
                $sql .= ' AND p.ocupacion = '.$ocupacion1;
            }

            if ($desdee != 0 && $hastae != 0) {
                $sql .= ' AND if(ls.menor = "SI", if(TIMESTAMPDIFF(YEAR,mp.fn,CURDATE()) >= '.$desdee.' AND TIMESTAMPDIFF(YEAR,mp.fn,CURDATE()) <= '.$hastae.', TIMESTAMPDIFF(YEAR,mp.fn,CURDATE()),""), if(TIMESTAMPDIFF(YEAR,p.fn,CURDATE()) >= '.$desdee.' AND TIMESTAMPDIFF(YEAR,p.fn,CURDATE()) <= '.$hastae.', TIMESTAMPDIFF(YEAR,p.fn,CURDATE()),"")) ';
            }

            $resul = DB::table('lentes_solicitud AS ls')
            ->join('j_familia AS jf', 'jf.id', '=', 'ls.id_solicitante')
            ->join('persona AS p', 'p.id', '=', 'jf.id_persona')
            ->leftJoin('persona AS mp', 'mp.id', '=', 'ls.id_menor')

            ->select('ls.id AS id_sol', 'ls.fecha_registro', 'p.cedula', 'p.nombre', 'ls.menor', 'mp.cedula AS menor_cedula', 'mp.nombre AS menor_nombre', 'ls.app', 'ls.reporte', 'ls.estatus',  'p.sexo AS generoa',  'mp.sexo AS generom', DB::raw('TIMESTAMPDIFF(YEAR,p.fn,CURDATE()) AS edad, TIMESTAMPDIFF(YEAR,mp.fn,CURDATE()) AS edadmenor'))
            ->whereRaw('ls.fecha_registro BETWEEN ? AND ? '.$sql.'', [$desde.' 00:00:00', $hasta.' 23:59:59'])
            ->orderBy('ls.fecha_registro', 'ASC')
            ->paginate(5000000000);

            //dd($sql);
        }

        $comunidad = DB::select('SELECT * FROM comunidad');
        $ocupacion = DB::select('SELECT * FROM ocupacion');

        $com = array();
        $ocu = array();

        $com[] = ['id' => 'T', 'nombre' => 'TODOS'];
        $ocu[] = ['id' => 'T', 'nombre' => 'TODOS'];

        foreach ($comunidad as $key => $value) {
            $com[] = ['id' => $value->id, 'nombre' => $value->nombre];
        }

        foreach ($ocupacion as $key => $value) {
            $ocu[] = ['id' => $value->id, 'nombre' => $value->nombre];
        }

        $datos = [
            'comunidad' => Collection::make($com)->pluck('nombre','id'),
            'ocupacion' => Collection::make($ocu)->pluck('nombre','id'),
            'datos' => $resul,
            'sexo' => $sexo
        ];


        //SELECT ls.id AS id_sol, ls.fecha_registro, p.cedula, p.nombre, ls.menor, mp.nombre AS menor_nombre, ls.app, ls.reporte, ls.estatus FROM lentes_solicitud AS ls INNER JOIN j_familia AS jf ON jf.id = ls.id_solicitante INNER JOIN persona AS p ON p.id = jf.id_persona LEFT JOIN persona AS mp ON mp.id = ls.id_menor WHERE ls.estatus2 = 1 ORDER BY ls.fecha_registro ASC

        return view('lentes.aprobacion', $datos);
    }

    function aprobacion(Request $request)
    {
        if($request->isMethod('post')){
            $mensajes = '';
            $accion = true;

            $aprobar = !empty($request->input('aprobar')) ? $request->input('aprobar') : [];
            $denegar = !empty($request->input('denegar')) ? $request->input('denegar') : [];

            for ($i=0; $i < count($aprobar); $i++) {
                $accion = true;
                //APROBADO
                $estatus = DB::select('SELECT * FROM lentes_solicitud WHERE id = ?', [$aprobar[$i]]);

                if ($estatus[0]->menor == 'SI') {
                    //MENOR
                    $nombre = DB::select('SELECT * FROM persona WHERE id = ?', [$estatus[0]->id_menor]);

                    $v1 = DB::select('SELECT * FROM j_familia WHERE id_persona = ?', [$estatus[0]->id_menor]);

                    $menor_sol = DB::select('SELECT * FROM lentes_solicitud WHERE id_menor = ?', [$estatus[0]->id_menor]);

                    $mayor_sol = DB::select('SELECT * FROM lentes_solicitud WHERE id_solicitante = ?', [!empty($v1[0]->id) ? $v1[0]->id : 0]);

                    foreach ($menor_sol as $key => $value) {
                        if ($value->estatus2 == 2) {
                            $mensajes .= $nombre[0]->cedula.', '.$nombre[0]->nombre.', ya tiene una solicitud aprobada el día '.$value->fecha_estatus.'.<br>';
                            $accion = false;
                        }
                    }

                    foreach ($mayor_sol as $key => $value) {
                        if ($value->estatus2 == 2) {
                            $mensajes .= $nombre[0]->cedula.', '.$nombre[0]->nombre.', ya tiene una solicitud aprobada el día '.$value->fecha_estatus.'.<br>';
                            $accion = false;
                        }
                    }

                } else {
                    //MAYOR
                    $v1 = DB::select('SELECT * FROM j_familia WHERE id = ?', [$estatus[0]->id_solicitante]);

                    $nombre = DB::select('SELECT * FROM persona WHERE id = ?', [!empty($v1[0]->id_persona) ? $v1[0]->id_persona : 0]);

                    $menor_sol = DB::select('SELECT * FROM lentes_solicitud WHERE id_menor = ?', [!empty($v1[0]->id_persona) ? $v1[0]->id_persona : 0]);

                    $mayor_sol = DB::select('SELECT * FROM lentes_solicitud WHERE id_solicitante = ?', [!empty($v1[0]->id) ? $v1[0]->id : 0]);

                    foreach ($menor_sol as $key => $value) {
                        if ($value->estatus2 == 2) {
                            $mensajes .= $nombre[0]->cedula.', '.$nombre[0]->nombre.', ya tiene una solicitud aprobada el día '.$value->fecha_estatus.'.<br>';
                            $accion = false;
                        }
                    }

                    foreach ($mayor_sol as $key => $value) {
                        if ($value->estatus2 == 2) {
                            $mensajes .= $nombre[0]->cedula.', '.$nombre[0]->nombre.', ya tiene una solicitud aprobada el día '.$value->fecha_estatus.'.<br>';
                            $accion = false;
                        }
                    }
                }

                if ($accion) {
                    DB::update('UPDATE lentes_solicitud SET fecha_estatus = ?, estatus = ?, estatus2 = ? WHERE id = ?', [date('Y-m-d H:i:s'), 'APROBADO', 2, $aprobar[$i]]);
                }
            }

            for ($i=0; $i < count($denegar); $i++) { 
                //DENEGADO
                DB::update('UPDATE lentes_solicitud SET fecha_estatus = ?, estatus = ?, estatus2 = ? WHERE id = ?', [date('Y-m-d H:i:s'), 'DENEGADO', 3, $denegar[$i]]);
            }

            if ($mensajes != '') {
                flash($mensajes)->error();
            }
            
            notify()->success('Guardado exitosamente');
            return redirect()->route('admin_lentes_analisis');
        }
    }
}
