<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Input;
use Illuminate\Support\Facades\Storage;
use App\Http\Requests;
use DateTime;
use Auth;
use DB;
use App\Configuracion as Configuracion;
use App\ExperienciaLaboral as ExperienciaLaboral;
use App\TipoVinculacionLaboral as TipoVinculacionLaboral;
use App\Http\Controllers\HelperController ;

class ExperienciaLaboralController 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()) {
      $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;

      $experiencias_laboral_info = ExperienciaLaboral::where('aspirantes_id', '=', $aspirante_id)->get();
      // Construimos un texto de "meses y días" para mostrar al usuario
      $experiencias_laboral_info->transform(function ($item) {
        if ($item->fecha_inicio && $item->fecha_finalizacion) {
          $item->tiempo_meses_texto = app('App\Http\Controllers\ExperienciaLaboralController')
            ->experienciaMesesDiasTexto($item->fecha_inicio, $item->fecha_finalizacion);
        } else {
          $item->tiempo_meses_texto = $item->tiempo_meses . ' ' . ($item->tiempo_meses === 1 ? 'mes' : 'meses');
        }
        return $item;
      });
      $tipos_experiencia_laboral = TipoVinculacionLaboral::all();

      $data = array(
        'aspirante_id' => $aspirante_id,
        'experiencias_laboral' => $experiencias_laboral_info,
        'tipos_vinculacion_laboral'=>$tipos_experiencia_laboral,
        'msg' => $msg,
        'count' => $count
      );
      return view('experiencia_laboral', $data);
    }
    else{
      $data = array(
        'limit_date' => $configuracion['valor']
      );
      auth()->logout();
      return view('auth/timeout', $data);
    }
  }

  public function insert() {
    $input = Input::all();
    $id = Auth::user()->id;
    $userCode = Auth::user()->codigo;
    $today = new \DateTime('today');

    $fechaInicio = \DateTime::createFromFormat('Y-m-d', $input['fecha_inicio']);
    if (!$fechaInicio) {
      return $this->show_info("La fecha de inicio no tiene un formato válido.");
    }
    if ($fechaInicio > $today) {
      return $this->show_info("La fecha de inicio no puede estar en el futuro.");
    }

    if (!isset($input['en_curso'])) {
      return $this->show_info("Debe indicar si la vinculación está vigente.");
    }

    //Verificamos si la vinculación está en curso para no tener en cuenta la fecha de finalización
    if ($input['en_curso']==1) {
      $input['fecha_finalizacion'] =  (new \DateTime())->format('Y-m-d');
    } else {
      if (empty($input['fecha_finalizacion'])) {
        return $this->show_info("La fecha de finalización es obligatoria cuando la vinculación no está vigente.");
      }
      $fechaFinalizacion = \DateTime::createFromFormat('Y-m-d', $input['fecha_finalizacion']);
      if (!$fechaFinalizacion) {
        return $this->show_info("La fecha de finalización no tiene un formato válido.");
      }
      if ($fechaFinalizacion > $today) {
        return $this->show_info("La fecha de finalización no puede estar en el futuro.");
      }
      if ($fechaInicio > $fechaFinalizacion) {
        return $this->show_info("La fecha de inicio no puede ser superior a la fecha de finalización.");
      }
    }

    $aleatorio = rand(111111, 999999);
    $titulo = substr($input['nombre_institucion'], 0, 12);
    $titulo = $titulo . $aleatorio;
    $titulo = str_replace(' ', '_', $titulo);
    //Guardamos el archivo de soporte de experiencia laboral si existe
    if (isset($input['adjunto'])){
      $file = Input::file('adjunto');
      //$titulo = str_replace(' ', '_', $input['nombre_institucion']) . '_' . $input['fecha_inicio'];
      $file->move(public_path() . '/file/' . $userCode . '/experiencia_laboral/' , $titulo . '.pdf');

      $input['ruta_adjunto'] = 'file/' . $userCode . '/experiencia_laboral/' . $titulo . '.pdf';
      unset($input['adjunto']);
    }

    $input['aspirantes_id'] = $id;
    $input['tiempo_meses'] = $this->experienciaMeses($input['fecha_inicio'],$input['fecha_finalizacion']);
    $experiencia_laboral = ExperienciaLaboral::create($input);


    if ($experiencia_laboral->save()) {
      return $this->show_info("Se ingresó exitosamente la información de experiencia laboral.");
    }
  }

  public function delete(){
    $input = Input::all();
    $experiencia_laboral=ExperienciaLaboral::find($input["id"]);

    if ($experiencia_laboral->ruta_adjunto) {
      Storage::delete($experiencia_laboral->ruta_adjunto);
    }
    if($experiencia_laboral->delete()){
      return $this->show_info("Se borró la información de la experiencia laboral.");
    }
  }

  public function experienciaMeses ($fechainicial,$fechafinal){
    $fechainicial = new DateTime($fechainicial);
    $fechafinal = new DateTime($fechafinal);
    // Si por alguna razón la fecha final es anterior a la inicial, no sumamos tiempo
    if ($fechafinal < $fechainicial) {
      return 0;
    }

    $diferencia = $fechainicial->diff($fechafinal);

    // Meses completos por años y meses (sin redondear días)
    $meses = ($diferencia->y * 12) + $diferencia->m;

    return $meses;
  }

  /**
   * Retorna un texto del tipo "X meses Y días" usando las fechas dadas.
   * Si solo hay días, se muestra solo días; si solo hay meses, solo meses.
   */
  public function experienciaMesesDiasTexto($fechainicial, $fechafinal) {
    $fechainicial = new DateTime($fechainicial);
    $fechafinal = new DateTime($fechafinal);

    if ($fechafinal < $fechainicial) {
      return '0 meses';
    }

    $diferencia = $fechainicial->diff($fechafinal);

    $meses = ($diferencia->y * 12) + $diferencia->m;
    $dias = $diferencia->d;

    $partes = [];
    if ($meses > 0) {
      $partes[] = $meses . ' ' . ($meses === 1 ? 'mes' : 'meses');
    }
    if ($dias > 0) {
      $partes[] = $dias . ' ' . ($dias === 1 ? 'día' : 'días');
    }

    if (empty($partes)) {
      return '0 meses';
    }

    return implode(' ', $partes);
  }

}
