<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Solicitud;
use App\Http\Controllers\reciboController;

class solicitudController extends Controller
{
    function enviar(Request $request){

        $vldc = $this->validarCampos($request);
        

        $reciboCotlr = new reciboController();
        
        if ($vldc == true) {
            $conExist = $this->buscarValdr($request['documento']);

            
            $vldc = $this->guardar($request, $conExist);
            // dd($vldc);
            
            if ($vldc == true) {
                $requestEncpld = $this->encapsular($request);
                
                $dataRecibo = $reciboCotlr->enviar($requestEncpld);
            
                if ($dataRecibo == 'Error') {
                    return redirect()->route('vistaFormulario');
                } else {
                    return view('recibo', compact('dataRecibo'));
                    
                }
            
            } else {
                return redirect()->route('vistaFormulario');
            }
            
        } else {
            return redirect()->route('vistaFormulario');
        }
    }

    function validarCampos($dataForm){
        $valdCond = false;
        
        //los nombres de los campos deben ser iguales a los que aparecen en el formulario, adicionalmente, si un campo deja de ser opcional tambien se debe ver reflejado acá

        $campos = [
            'nombre_completo',
            'tipo_documento',
            'documento',
            'fecha_nacimiento',
            'edad',
            'correo_pers',
            'num_cel',
            'num_whatsapp',
            'direccion',
            'barrio',
            'estrato',
            'ciudadania',  //cambiar en vistas Ciudadania
            'estado_civil',
            'religion',
            'etnia',
            'op_estudio',
            'programa',  //cambiar en vista prgrama
            'eps',
            'discapacidad',
            'nombre_emergencia_1',
            'num_emergencia_1',
            'Parentesco_1',
            'nombre_emergencia_2',
            'num_emergencia_2',
            'Parentesco_2',
            'asesor', //cambiar en vista nombre_acesor
            'calificacion' //cambiar en vista (no tiene)
        ];

        // $camposOpcnls = [
        //     'codigo_id',
        //     'correo_inst',
        //     'num_whatsapp',
        //     'nombre_emergencia_2',
        //     'num_emergencia_2',
        //     'Parentesco_2'
        // ];
        
        $camposDepndts =[
            'otro_tipo_documento' => 'tipo_documento',
            'cual_discapacidad' => 'discapacidad'
        ];

        // if ($dataForm->has($campos) && $dataForm->has($camposOpcnls)) {
        if ($dataForm->has($campos)) {
            $valdCond = true;

            foreach ($campos as $cmp) {
                if (empty($dataForm[$cmp])) {
                    $valdCond = false;
                    break;
                }
            }
            
            foreach ($camposDepndts as $clave => $cmp){
                if ($dataForm[$cmp] == 'OTRO' || $dataForm[$cmp] == 'Si') {
                    if (empty($dataForm[$clave])) {
                        $valdCond = false;
                        break;
                    }
                }
            }
        }
        
        return $valdCond;
    }

    function guardar($resp, $rstCond){
        $cond = true;

        if ($rstCond == true) {
            $respActlz = $this->actualizarEstdRecb($data['documento'], $data['evento']);
        }

        if ($rstCond == 'error') {
            $cond = false;
        } else {
            //El nombre de la key/clave del array debe ser igual al nombre de la columna en la base de datos (incluye mayusculas y minusculas)
            $data = [    
                'nombre' => $resp['nombre_completo'],
                'tipo_documento' => (empty($resp['otro_tipo_documento'])) ? $resp['tipo_documento'] : $resp['otro_tipo_documento'],
                'documento' => $resp['documento'],
                'fecha_nacimiento' => $resp['fecha_nacimiento'],
                'edad' => $resp['edad'],
                'correo' => $resp['correo_pers'],
                'celular' => $resp['num_cel'],
                'numero_whatsapp' => $resp['num_whatsapp'],
                'direccion' => $resp['direccion'],
                'barrio' => $resp['barrio'],
                'estrato' => $resp['estrato'],
                'ciudadania' => $resp['ciudadania'],
                'estado_civil' => $resp['estado_civil'],
                'religion ' => $resp['religion'],
                'etnia' => $resp['etnia'],
                'programas_id' => $resp['programa'],
                'eps' => $resp['eps'],
                'discapacidad' => (empty($resp['cual_discapacidad'])) ? $resp['discapacidad'] : $resp['cual_discapacidad'],
                'nombre_contacto_1' => $resp['nombre_emergencia_1'],
                'telefono_contacto_1' => $resp['num_emergencia_1'],
                'parentesco_contacto_1' => $resp['Parentesco_1'],
                'nombre_contacto_2' => $resp['nombre_emergencia_2'],
                'telefono_contacto_2' => $resp['num_emergencia_2'],
                'parentesco_contacto_2' => $resp['Parentesco_2'],
                'asesores_id ' => $resp['asesor'],
                'calificacion ' => $resp['calificacion'],
                'estado' => 1
            ];
        
            try {
                Solicitud::insert($data);
                
            } catch (\Throwable $th) {
                $cond = false;

            }
        }

        return $cond;
    }

    function encapsular($data){
        $dataEncpsld = [
            'nombEvento' => 'Encuentro Nacional de Trabajo Social',
            'nombCliente' => $data["nombre_completo"],
            'tipoDoc' => ($data->has('otro_tipo_documento')) ? $data["otro_tipo_documento"] : $data["tipo_documento"],
            'numDoc' => $data["documento"],
            'correoPers' => $data["correo_pers"]
        ];

        return $dataEncpsld;
    }

    function buscarValdr($data){
        $numDoc = $data;

        try {
            $contRecb = Solicitud::where('documento', $numDoc)
                ->where('estado', 1)
                ->count('id');
            
            if ($contRecb == 0) {
                $exist = false;
            } else {
                $exist = true;
            }
            
        } catch (\Throwable $th) {
            $exist = 'error';
        }
        
        return $exist;
    }

    function actualizarEstdRecb($doc){
        $cond = true;

        try {
            $request = Solicitud::where('documento', $doc)
                ->where('estado', 1)
                ->update([
                    'estado' => 0
                ]);
        } catch (\Throwable $th) {
            $cond = false;
        }
    }
}
