<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Seccion;
use Illuminate\Support\Facades\Storage;

class AudiosController extends Controller
{
    /**
     * Store a newly created resource in storage.
     *
     * @param  Request  $request
     * @return Response
     */
    public function store(Request $request)
    {
    	$data = $request->all();
      $now = new \DateTime();
      
      //obtenemos el campo file definido en el formulario
      $files = $request->file('audios');

      $i = 0;
      foreach ($files as $file) {

	      $extension = $file->getClientOriginalExtension();
	      if ($extension=='mp3' || $extension=='MP3') {

	      	$fileName = $file->getClientOriginalName();
	      	
	      	$seccion = Seccion::where('audio', 'like', $fileName)->whereHas('modulo.configuracion', function($query) use ($data){
	      		$query = $query->where('id', $data['idConfiguracion']);
	      	})->first();
	      	//dd($seccion);
	      	if ($seccion) {

		      	$fileName = "conf_".$data['idConfiguracion']."_secc_".$seccion->id.".".$extension;
		      	$seccion->audio = $fileName;
		      	$seccion->save();
		          
	          //indicamos que queremos guardar un nuevo archivo en el disco local
	          Storage::disk('audios')->put('confi_'.$data['idConfiguracion']."/".$fileName,  \File::get($file));
	        
	        } else {
	        	$i++;
	        }
	      	
	      } else { 
	      	return response()->json([ 'estado' => 'ERROR', 'message' => 'EL ARCHIVO DEBE DE SER EN FORMATO: MP3.' ]); 
	      }
	    }

	    if ($i>0) {
	    	return response()->json([ 'estado' => 'OK' , 'message' => $i.' audios no coinciden con el nombre del csv.' ]);	
	    } else {
	    	return response()->json([ 'estado' => 'OK' , 'message' => 'Audios almacenados en el servidor de forma correcta.' ]);
	    }
	    

    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  Request  $request
     * @return Response
     */
    public function update(Request $request)
    {
      $data = $request->all();
      $files = $request->file('audios');		//obtenemos el campo file definido en el formulario

      foreach ($files as $file) {

	      $extension = $file->getClientOriginalExtension();
	      if ($extension=='mp3' || $extension=='MP3') {

	      	$fileName = $file->getClientOriginalName();
	      	
	      	$seccion = Seccion::where('id', $data['idSeccion'])->first();
	      	
	      	if ($seccion) {

		      	$fileName = "conf_".$data['idConfiguracion']."_secc_".$seccion->id.".".$extension;
		      	
		      	Storage::disk('audios')->delete('confi_' . $data['idConfiguracion'] . '/' . $seccion->audio );

		      	$seccion->audio = $fileName;
		      	$seccion->save();
		          
	          //indicamos que queremos guardar un nuevo archivo en el disco local
	          Storage::disk('audios')->put('confi_'.$data['idConfiguracion']."/".$fileName,  \File::get($file));
	        
	        } else {
	        	return response()->json([ 'estado'=>'ERROR', 'message'=>'Error al encontrar la sección para actualizar el audio.' ]); 
	        }
	      	
	      } else { 
	      	return response()->json([ 'estado'=>'ERROR', 'message'=>'EL ARCHIVO DEBE DE SER EN FORMATO: MP3.' ]); 
	      }
	    }

	    return response()->json([ 'estado' => 'OK' , 'message' => 'Audio actualizado en el servidor de forma correcta.' ]);
	    
    }

    /**
     * Funcion que duplica los audios de un examen anterior a una carpeta nueva.
     * 
     * Tener en consideración que el nombre del audio,tendrá el id de la 
     * configuración anterior.
     * 
     * @param  Request $request deberá recibir los datos de 
     *         ['idConfi', 'idConfiNueva']
     *         
     * @return [type]           [description]
     */
    public function duplicar(Request $request){
    	$data = $request->all();
    	$directories = Storage::disk('audios')->files('confi_'.$data['idConfi']); //obtiene el nombre de todos los audios dentro de la carpeta
    	
    	foreach($directories as $n){
    		$nombre = explode('/', $n);
    		$posicion = count($nombre);
    		$nombre = $nombre[$posicion-1];
    		$v = Storage::disk('audios')->copy(	'confi_'.$data['idConfi'].'/'.$nombre, 
    																				'confi_'.$data['idConfiNueva'].'/'.$nombre);	
    	}

    	return response()->json([ 'estado' => 'OK' , 'message' => 'Audios almacenados de forma correcta.' ]);
    }
}
