<?php

namespace App\Http\Controllers;

use Illuminate\Support\Facades\Input;
use Illuminate\Support\Facades\Storage;
use Illuminate\Http\Request;

use Auth;
use DB;
use App\Configuracion as Configuracion;
use App\Aspirante as Aspirante;
use App\Tiponivel as Tiponivel;
use App\Nivel as Nivel;
use App\Programa as Programa;
use App\TipoDocumento as TipoDocumento;
use App\Pais as Pais;

class AspiranteController extends Controller {

  public function show_info($msg = null) {
    $configuracion = Configuracion::where('llave', '=', 'limit_date')->first();
    if (strtotime($configuracion['valor']) > (time()- 5 * 3600)  || Auth::user()->isAdmin()) {
      try {
        $aspirante_id = Auth::user()->id;
        //Contamos la cantidad de registros de cada tipo de formulario para visualizarlos en las pestañas
        //de la plantilla (main.blade.php)
        $objeto = new HelperController();
        $count = $objeto->menu($aspirante_id);

        $user_email = Auth::user()->email;
        $user_code = Auth::user()->codigo;
        $candidate_info = Aspirante::where('correo', '=', $user_email)->first();

        $tiponiveles = Tiponivel::all();
        $niveles = Nivel::all();
        $programas = Programa::all();
        $tipos_documento = TipoDocumento::all();
        $paises = Pais::orderBy('nombre')->get();

        if (!$candidate_info) {
          #$candidate_info = Aspirante::where('id', '=', 0)->first();
          /*$candidate_info = new Aspirante([
            'id' => 0,
            'codigo' => null,
            'programa_id' => null, 
            'nombre' => null, 
            'apellido' => null, 
            'documento' => null, 
            'tipo_documento_id' => null, 
            'ciudad_expedicion_documento' => null, 
            'fecha_nacimiento' => null, 
            'pais_nacimiento' => null, 
            'pais_residencia' => null, 
            'direccion_residencia' => null, 
            'correo' => null, 
            'estado_civil_id' => null, 
            'ciudad_aplicante' => null, 
            'ruta_adjunto_documento' => null, 
            'ruta_adjunto_tarjetaprofesional' => null, 
            'telefono_fijo' => null, 
            'telefono_movil' => null, 
            'formulario_enviado' => 'No'
          ]);*/
          $candidate_info = new Aspirante();
          foreach ($candidate_info->getFillable() as $field) {
            if($field === 'formulario_enviado'){
              $candidate_info->$field = 'No';
            } elseif ($field !== 'id'){
              $candidate_info->$field = null;
            }
          }
        }
        } catch (ErrorException $e) {
        $msg = "Ocurrió un error recopilando su información personal. Se recomienda cerrar sesión y abrirla nuevamente.";
        }finally {
        $data = array(
          'id' => $aspirante_id,
          'codigo' => $user_code,
          'correo' => $user_email,
          'candidate_info' => $candidate_info,
          'tiponiveles' => $tiponiveles,
          'niveles' => $niveles,
          'programas' => $programas,
          'tipos_documento' => $tipos_documento,
          'paises' => $paises,
          'msg' => $msg,
          'count' => $count
        );
        return view('aspirante', $data);
      }
    }
    else{
      $data = array(
        'limit_date' => $configuracion['valor']
      );
      auth()->logout();
      return view('auth/timeout', $data);
    }
  }

  public function insert(Request $request) {
    $input = $request->all();
    $id = Auth::user()->id;
    $userCode = Auth::user()->codigo;

    // Validar mayoría de edad (>= 18 años)
    if (empty($input['fecha_nacimiento'])) {
      return redirect()->back()->with('message', 'La fecha de nacimiento es obligatoria.');
    }
    $fechaNacimiento = \DateTime::createFromFormat('Y-m-d', $input['fecha_nacimiento']);
    if (!$fechaNacimiento) {
      return redirect()->back()->with('message', 'La fecha de nacimiento no tiene un formato válido.');
    }
    $limiteMayorEdad = new \DateTime('today');
    $limiteMayorEdad->modify('-18 years');
    if ($fechaNacimiento > $limiteMayorEdad) {
      return redirect()->back()->with('message', 'Debe ser mayor de 18 años para continuar.');
    }

    // No permitir teléfonos negativos
    foreach (['telefono_fijo', 'telefono_movil'] as $telefonoField) {
      if (isset($input[$telefonoField]) && $input[$telefonoField] !== '') {
        if (!is_numeric($input[$telefonoField]) || (float) $input[$telefonoField] < 0) {
          return redirect()->back()->with('message', 'Los campos de teléfono no permiten valores negativos.');
        }
      }
    }
    
    //Validar si la cédula ingresada ya se encuentra en la base de datos_personales
    if (isset($input['documento'])) {
      $aspirante_cedula = Aspirante::where('documento', $input['documento'])->get();
      $aspirante_cedula = $aspirante_cedula->toArray();
      if(!empty($aspirante_cedula)){
        if ($id != $aspirante_cedula['0']['id']) {
          return redirect()->back()->with('message', 'El número de documento ingresado ya se encuentra en la base de datos');
        }
      }
    } else {
        return redirect()->back()->with('message', 'El campo documento es obligatorio.');
    }
 
    $input['id'] = $id;
    $record = Aspirante::find($id);
    if ($record) {
      //Efectuamos las operaciones sobre los archivos adjuntos
      //Borramos y guardamos nuevamente el soporte del documento de identidad
      if (isset($input['adjunto_documento'])) {
        Storage::delete($record->ruta_adjunto_documento);

        $file = Input::file('adjunto_documento');
        $file->move(public_path() . '/file/' . $userCode . '/datos_personales/' , 'documento_identidad.pdf');

        $input['ruta_adjunto_documento'] = 'file/' . $userCode . '/datos_personales/' . 'documento_identidad.pdf';
        unset($input['adjunto_documento']);
      }
      //Borramos y guardamos nuevamente el soporte de la tarjeta profesional
      if (isset($input['adjunto_tarjetaprofesional'])) {
        if ($record->ruta_adjunto_tarjetaprofesional){
          Storage::delete($record->ruta_adjunto_tarjetaprofesional);
        }
        $file = Input::file('adjunto_tarjetaprofesional');
        $file->move(public_path() . '/file/' . $userCode . '/datos_personales/' , 'tarjeta_profesional.pdf');

        $input['ruta_adjunto_tarjetaprofesional'] = 'file/' . $userCode . '/datos_personales/' . 'tarjeta_profesional.pdf';
        unset($input['adjunto_tarjetaprofesional']);
      }

      $record->fill($input);
      $record->save();
      return redirect('perfiles');
    }
    else {
      //Efectuamos las operaciones sobre los archivos adjuntos
      //Guardamos el soporte del documento de identidad (es obligatorio)
      $file = Input::file('adjunto_documento');
      $file->move(public_path() . '/file/' . $userCode . '/datos_personales/' , 'documento_identidad.pdf');

      $input['ruta_adjunto_documento'] = 'file/' . $userCode . '/datos_personales/' . 'documento_identidad.pdf';
      unset($input['adjunto_documento']);

      //Guardamos el documento de soporte de la tarjeta profesional si existe
      if (isset($input['adjunto_tarjetaprofesional'])) {
        $file = Input::file('adjunto_tarjetaprofesional');
        $file->move(public_path() . '/file/' . $userCode . '/datos_personales/' , 'tarjeta_profesional.pdf');

        $input['ruta_adjunto_tarjetaprofesional'] = 'file/' . $userCode . '/datos_personales/' . 'tarjeta_profesional.pdf';
        unset($input['adjunto_tarjetaprofesional']);
      }
      Aspirante::create($input);
      return redirect('perfiles');
    }
  }



}
