<?php

namespace App\Modules\Utilitarios\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\Storage;
use App\Http\Controllers\Controller;
use App\Modules\Utilitarios\Models\Files_contable;
use Yajra\Datatables\Datatables;
use Session;
use DB;
class Files_contableController extends Controller
{
  
    function __construct(){

    }
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {

    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {

    }
    /**
     * Funcion global para agregar un archivo
     *
     * @param  $files, id_file y carpeta
     * @return cresultado del guardado de datos
    */
    public function addfile($files,$id_file,$carpeta){
        $allowedfileExtension=['jpg','png','pdf','xls','xlsx'];
        if(!Storage::disk('public_uploads')->has($carpeta)){
            Storage::disk('public_uploads')->makeDirectory($carpeta);
        } 
        if(!Storage::disk('public_uploads')->has($carpeta.'/'.$id_file)){
            Storage::disk('public_uploads')->makeDirectory($carpeta.'/'.$id_file);
        }
        foreach ($files as $key => $k) {
            $files = new Files_contable();
            $extension = $k->getClientOriginalExtension();
            $check=in_array($extension,$allowedfileExtension);
            if ($check) {
                $name = $k->store($carpeta.'/'.$id_file,['disk' => 'public_uploads']);
                $files->nombre_archivo = $name;
                $files->tipe_modulo = $carpeta;
                $files->tipe_archivo = $extension;
                $files->id_files =  $id_file;
                $files->save();
            }else{
                //$error++;
            }
        }
    }
    /**
     * Funcion global para actualizar un archivo
     *
     * @param  $files, id_file y carpeta
     * @return cresultado del guardado de datos
    */
    public function updatefile($files,$id_file,$id_tipe,$carpeta){
        $allowedfileExtension=['jpg','png','pdf','xls','xlsx'];
        $file_data = Files_contable::find($id_file);
        if (!empty($file_data)) {
            if(!Storage::disk('public_uploads')->has($carpeta)){
                Storage::disk('public_uploads')->makeDirectory($carpeta);
            } 
            if(!Storage::disk('public_uploads')->has($carpeta.'/'.$id_tipe)){
                Storage::disk('public_uploads')->makeDirectory($carpeta.'/'.$id_tipe);
            }
            foreach ($files as $key => $k) {
                $extension = $k->getClientOriginalExtension();
                $check=in_array($extension,$allowedfileExtension);
                if ($check) {
                    $id = explode('/', $file_data->nombre_archivo);
                    $exists = Storage::disk('public_uploads')->exists($file_data->nombre_archivo);
                    if ($exists) {
                        Storage::disk('public_uploads')->delete($file_data->nombre_archivo);
                    }
                    $name = $k->store($id[0].'/'.$id[1],['disk' => 'public_uploads']);
                    $file_data->nombre_archivo = $name;
                    $file_data->tipe_archivo = $extension;
                    $file_data->save();
                }else{
                    //$error++;
                }
            }
        }else{
            $this->addfile($files,$id_tipe,$carpeta);
        }
    }
    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
    */
    public function store(Request $request)
    {   
        if ($request->has('action')) {
            switch ($request->input("action")) {
                case 'addfile':
                    $data = $request->all();
                    $files = $data['file'];
                    $id = $data['id_files'];
                    $allowedfileExtension=['jpg','png','pdf','xls','xlsx'];
    
                    if(!Storage::disk('public_uploads')->has($data['tipefile'].$id)){
                        Storage::disk('public_uploads')->makeDirectory($data['tipefile'].$id);
                    }
                    foreach ($files as $key => $k) {
                        $files = new Files_contable();
                        $extension = $k->getClientOriginalExtension();
                        $check=in_array($extension,$allowedfileExtension);
                        if ($check) {
                            $name = $k->store($data['tipefile'].$id,['disk' => 'public_uploads']);
                            $nom_img = explode('/',$name);
                            $files->nombre_archivo = $name;
                            $files->tipe_modulo = $data['tipefile'];
                            $files->tipe_archivo = $extension;
                            $files->id_files =  $id;
                            $files->save();
                        }else{
                            //$error++;
                        }
                    }
                    return response()->json(['success'=>'Registro agregado con exito','list_archive'=>'active']);            
                break;
                case 'list_archivos':
                   return $this->get_files($request->all());
                break;
                case 'updateFile':
                    $files = $request->file('file');
                    if (!empty($files)) {
                        $allowedfileExtension=['jpg','png','pdf','xls','xlsx'];
                        $id_file = $request->input('id_file');
                        foreach ($files as $key => $k) {
                            $files = new Files_contable();
                            $extension = $k->getClientOriginalExtension();
                            $check=in_array($extension,$allowedfileExtension);
                            if ($check) {
                                $file_data = Files_contable::find($id_file);
                                if (!empty($file_data)) {
                                    $id = explode('/', $file_data->nombre_archivo);
                                    $exists = Storage::disk('public_uploads')->exists($file_data->nombre_archivo);
                                    if ($exists) {
                                        Storage::disk('public_uploads')->delete($file_data->nombre_archivo);
                                    }
                                    $name = $k->store($id[0],['disk' => 'public_uploads']);
                                    $nom_img = explode('/',$name);
                                    $file_data->nombre_archivo = $name;
                                    $file_data->save();
                                }
                            }else{
                                    //$error++;
                            }
                        }
                    }
                    return response()->json(['success'=>'Imagen actualizada con exito','updateprocess'=>'updateprocess']);
                break;
            }
        }else{
            return response()->json(['error'=>'No existe ningun token por favor no borre nuesto codigo html']);
        }
    }
    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        $search = Files_contable::find($id);
        return view('Utilitarios.views.edit.files')->with('data',$search);
    }
    /**
     * Obtengo los registros de los archivos
     *
     * @param  request inputs all
     * @return data list
    */
    public function get_files($data){
        $search = Files_contable::where('tipe_modulo',$data['tipe_archivos'])->where('id_files',$data['id_files'])->get();
        if ($search->count() > 0) {
            return $search;
        }else{
            return false;
        }
    }
    /**
     * Obtengo un registro solamente para archivos
     *
     * @param  request inputs all
     * @return data list
    */
    public function get_files_by_id($id,$tipe){
        $search = Files_contable::where('id_files',$id)->where('tipe_modulo',$tipe)->first();
        return $search;
    }
    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {   
        $search = Files_contable::find($id);
        return view('Utilitarios.views.edit.editfiles')->with('data',$search);
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        print_r($request->all());
        if ($request->has('action')) {
            
           switch ($request->input('action')) {
                case 'updateFile':


                break;
               
                default:
                   # code...
                break;
           }
        }
    }
    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        $data = Files_contable::find($id);
        if (!empty($data)) {
           $exists = Storage::disk('public_uploads')->exists($data->nombre_archivo);
            if ($exists) {
                Storage::disk('public_uploads')->delete($data->nombre_archivo);
            }
            $data->delete();
            return response()->json(['success'=>'Registro Eliminado con exito']);
        }
    }
}
