<?php

namespace App\Http\Controllers\NGL;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Carbon\Carbon;
use Maatwebsite\Excel\Facades\Excel;
use App\Imports\ExamenInglesCollectionImport;
use App\{Seccion, Periodo, Configuracion, Modulo, Pregunta, NivelIngles, ConfiguracionNivel};

class LiberacionController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $configuracion = Configuracion::where('estado', '2')
                                      ->orWhere('estado','3')
                                      ->with('periodo')->get();
        $periodos = Periodo::where('id', '>=', '7')->get();
        return view('examen_ingles.liberacion.principal', compact('configuracion', 'periodos'));
    }

    public function filtro_confi(Request $request){
        $data = $request->all();
        if ($data['filtro_periodo'] !=null) {
          $configuracion = Configuracion::where('periodo_id',$data['filtro_periodo'])
                                        ->where(function($query) {
                                          $query->where('estado', '2')
                                                ->orWhere('estado', '3');
                                        })
                                        ->with('periodo')
                                        ->paginate(100);
        } else {
          $configuracion = Configuracion::where('estado', '2')
                                      ->orWhere('estado','3')
                                      ->with('periodo')
                                      ->get();
        }
        
        return view('examen_ingles.liberacion.contenido', compact('configuracion'))->with('no_pag', true);
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        $periodos = Periodo::where('id', '>=', '5')->orderBy('id', 'desc')->get();
        return view('examen_ingles.liberacion.confi.nuevo', compact('periodos'));
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
      $data = $request->all();

      //Validar si viene el archivo no hacer esta consulta
      if (!array_key_exists('archivo', $data)) {
        $idCopia = Configuracion::latest('id')->select('id')->where('estado', '2')->first();
        if ($idCopia==null) {
          return response()->json(['estado'=>'error', 'message'=>'Por favor, sube un archivo para configurar el examen.']);  
        }
      }

      $confi = Configuracion::where('estado', '2')->update(['estado' => '3']);

      //Para que funcione local, es necesario mandar llamar la funcion strtotime al inicio
      $finan_i = ( str_replace('T', ' ', $data['inicio_financieros'].":00") );
      $finan_f = ( str_replace('T', ' ', $data['fin_financieros'].":00") );

      $idNuevo = Configuracion::create([ 
        'periodo_id'=>$data['periodo'], 
        'inicio_pago'=>$finan_i, 
        'cierre_pago'=>$finan_f, 
        'fecha'=>$data['fecha'], 
        'hora_inicio'=>$data['inicio'], 
        'hora_cierre'=>$data['cierre'], 
        'duracion'=>$data['duracion'], 
        'estado'=>'2' 
      ]);


      //Aqui volver a validar, si viene archivo, algoritmo para guardar si no el siguiente
      if (array_key_exists('archivo', $data)) {   
        Excel::import(new ExamenInglesCollectionImport, request()->file('archivo'));
      } else {
        
        $modulos = Modulo::where('configuracion_id', $idCopia->id)->with('seccion.pregunta')->get();
        
        foreach ($modulos as $m) {
          if ($m->estado=='1') {
            $modulo_new = Modulo::create([ 'configuracion_id'=>$idNuevo->id, 'nombre'=>$m->nombre, 'descripcion'=>$m->descipcion, 'estado'=>'1' ]);
            
            foreach ($m->seccion as $s) {
              if ($s->estado=='1') {
                $seccion_new = Seccion::create([ 'modulo_id'=>$modulo_new->id, 'num'=>$s->num, 'indicacion'=>$s->indicacion, 'texto'=>$s->texto, 'audio'=>$s->audio, 'estado'=>'1']);

                foreach ($s->pregunta as $p) {
                  if ($p->estado=='1') {
                    /*echo "Respuesta 1: ".trim($p->resp_1)." ** ";
                    echo "Respuesta 2: ".trim($p->resp_2)." ** ";
                    echo "Respuesta 3: ".trim($p->resp_3)." ** ";
                    echo "Respuesta 4: ".trim($p->resp_4)."<br>";*/
                    Pregunta::create([ 'seccion_id'=>$seccion_new->id, 'pregunta'=>$p->pregunta, 
                      'resp_1'=>trim($p->resp_1), 'resp_2'=>trim($p->resp_2), 
                      'resp_3'=>trim($p->resp_3), 'resp_4'=>trim($p->resp_4), 
                      'resp_5'=>trim($p->resp_5), 
                      'estado'=>'1', 'puntos'=>$p->puntos ]);
                  } 
                }
              } 
            }
          }
        }

      }
      
      return response()->json(['estado'=>'success', 'message'=>'Examen de liberación configurado de manera exitosa.', 'idConfiguracion'=>$idNuevo->id ]);    

    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    /*public function show($id)
    {
      $confi = Configuracion::where('id', $id)->first();
      $date = Carbon::now('America/Mexico_City'); //2015-01-01 00:00:00

      $modulo = Modulo::where('configuracion_id', $id)->where('estado', '1')
                  ->with('seccion.pregunta')->get();

      if ( $confi->fecha->format('Y-m-d') > $date->format('Y-m-d' ) || 
         ( $confi->fecha->format('Y-m-d') == $date->format('Y-m-d') && $confi->hora_inicio > $date->format('H:i:s')) ) {
        //todavia no se aplica el examen
        return view('examen_ingles.examen.modificar', compact('modulo'));
      } else {
        //examen aplicado
        return view('examen_ingles.examen.consulta', compact('modulo'));
      }

    }*/

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
      $niveles = NivelIngles::where('estado', '1')->get();
      $periodos = Periodo::where('id', '>=', '5')->orderBy('id', 'desc')->get();
      $c = Configuracion::where('id', $id)->with('niveles.nivel')->first();
      $date = Carbon::now('America/Mexico_City'); //2015-01-01 00:00:00

      if ( $c->fecha->format('Y-m-d') > $date->format('Y-m-d' ) || 
         ( $c->fecha->format('Y-m-d') == $date->format('Y-m-d') && $c->hora_inicio > $date->format('H:i:s')) ) {
        //todavia no se aplica el examen
        return view('examen_ingles.liberacion.confi.modificar', compact('periodos', 'niveles', 'c'));
        //return view('examen_ingles.liberacion.confi.consultar', compact('periodos', 'c'));
      } else {
        //examen aplicado
        return view('examen_ingles.liberacion.confi.consultar', compact('periodos', 'c'));
      }
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request)
    {

      $data = $request->all();

      //Para que funcione local, es necesario mandar llamar la funcion strtotime al inicio
      $finan_i = ( str_replace('T', ' ', $data['inicio_financieros'].":00") );
      $finan_f = ( str_replace('T', ' ', $data['fin_financieros'].":00") );

      $confi = Configuracion::where('id', $data['configuracion'])->first();
      
      $confi->inicio_pago=$finan_i; 
      $confi->cierre_pago=$finan_f; 
      $confi->fecha=$data['fecha']; 
      $confi->hora_inicio=$data['inicio']; 
      $confi->hora_cierre=$data['cierre']; 
      $confi->duracion=$data['duracion']; 
      $confi->save();
      
      return response()->json(['estado'=>'success', 'message'=>'Configuración de examen realizado de manera exitosa.', 'idConfiguracion'=>$data['configuracion'] ]);
    
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        //
    }




}
