<?php

namespace App\Http\Controllers;

use App\Prestamo;
use Illuminate\Database\QueryException;
use Illuminate\Http\Request;
use App\Model\TipoBibliografia;
use App\Model\Bibliografia;
use App\Model\Autor;
use App\Model\Ejemplar;
use Illuminate\Support\Facades\Input;
use Illuminate\Support\Facades\DB;
use App\Providers\SweetAlertServiceProvider;
use Illuminate\Support\Facades\Storage;
use Mockery\Exception;
use function Sodium\add;

class BibliografiaController extends Controller
{
    public function getIndex()
    {
        $tipos = TipoBibliografia::all();
        $bibliografia = DB::select(DB::raw('select b.id, b.nombre, b.materia, b.ciudad_pais, b.editorial, b.url,
                                             tb.nombre as tipo_bibliografia,
                                             a.nombres, 
                                             count(e.id) as cantidadejemplares 
                                             from bibliografia b 
                                             join autor a on a.id = b.id_autor
                                             left join tipo_bibliografia tb on tb.id = b.id_tipo_bibliografia
                                             left join ejemplar e on e.id_bibliografia = b.id and e.estado != 0
                                             where b.habilitado = 1 
                                             group by b.id,b.url, b.nombre, b.materia, b.ciudad_pais,b.editorial,
                                                      tipo_bibliografia, a.nombres
                                             order by b.nombre'));
        return view('pages.Bibliografia.index')->with('tipos', $tipos)->with('bibliografias', $bibliografia);
    }

    public function Detalle($BibliografiaId)
    {
        if (!is_numeric($BibliografiaId)) {
            alert()->warning(config('constants.ALERT.NOTFOUND.MENSAJE'), config('constants.ALERT.NOTFOUND.TITULO'));
            return redirect('bibliografia');
        }
        $bibliografia = Bibliografia::find($BibliografiaId);

        if (!$bibliografia) {
            alert()->warning(config('constants.ALERT.NOTFOUND.MENSAJE'), config('constants.ALERT.NOTFOUND.TITULO'));
            return redirect('bibliografia');
        }

        return view('pages.Bibliografia.Detalle')->with('libro', $bibliografia);
    }

    public function getDetalle($BibliografiaId)
    {

        if (!is_numeric($BibliografiaId)) {
            alert()->warning(config('constants.ALERT.NOTFOUND.MENSAJE'), config('constants.ALERT.NOTFOUND.TITULO'));
            return redirect('bibliografia');
        }
        $bibliografia = Bibliografia::find($BibliografiaId);

        if (!$bibliografia) {
            alert()->warning(config('constants.ALERT.NOTFOUND.MENSAJE'), config('constants.ALERT.NOTFOUND.TITULO'));
            return redirect('bibliografia');
        }

        $tipobibliografia = TipoBibliografia::find($bibliografia->id_tipo_bibliografia);
        $autor = Autor::find($bibliografia->id_autor);

        $ejemplares = DB::select(DB::raw('select e.codigo_CS, e.anio, e.edicion,e.id
                                          from ejemplar e
                                          where e.id_bibliografia =' . $BibliografiaId . ' && e.estado != 0'));
        return view('pages.Bibliografia.detalle')->with('libro', $bibliografia)->with('ejemplares', $ejemplares)->with('tipo', $tipobibliografia)->with('autor', $autor);
    }

    public function getCrearBilbiografia()
    {
        $tipos = TipoBibliografia::pluck('nombre', 'id');
        return view('pages.Bibliografia.crear')->with('tipos', $tipos);
    }

    public function descargar($id)
    {

        $bibliografia = Bibliografia::find($id);

        $bibliografia->num_descarga = $bibliografia->num_descarga + 1;

        $bibliografia->save();

        $path = 'app/' . $bibliografia->path;
        $path2 = storage_path($path);

        return response()->download($path2, $bibliografia->nombre . '.pdf');
    }


    public function getEditarBibliografia($id)
    {
        if (!is_numeric($id)) {
            alert()->warning(config('constants.ALERT.NOTFOUND.MENSAJE'), config('constants.ALERT.NOTFOUND.TITULO'));
            return redirect('bibliografia');
        }
        $bibliografia = Bibliografia::find($id);

        if (!$bibliografia) {
            alert()->warning(config('constants.ALERT.NOTFOUND.MENSAJE'), config('constants.ALERT.NOTFOUND.TITULO'));
            return redirect('bibliografia');
        }

        $tipos = TipoBibliografia::pluck('nombre', 'id');
        $autor = Autor::find($bibliografia["id_autor"]);

        return view('pages.Bibliografia.editar')->with('bibliografia', $bibliografia)->with('tipos', $tipos)
            ->with('autor', $autor);
    }

    public function getAutores(Request $request)
    {
        $autores = $request['autores'];
        $dnisUsuarios = Autor::where('nombres', 'LIKE', "%{$autores}%")->get();
        return Response()->json(['data' => $dnisUsuarios]);
    }

    public function EditarBibliografia(Request $request)
    {
        $bibliografiaEditar = Bibliografia::find($request["id"]);
        $bibliografiaEditar->nombre = Input::get('nombre');
        $bibliografiaEditar->materia = Input::get('materia');
        $bibliografiaEditar->ciudad_pais = Input::get('ciudad_pais');
        $bibliografiaEditar->epilogo = Input::get('epilogo');
        $bibliografiaEditar->editorial = Input::get('editorial');

        if ($request->img != null) {
            $file = $request->img;
            $filename = $file->store('public/bibliografia');

            if (!Storage::disk('public_uploads')->put('public/bibliografia', $file)) {
                return false;
            }

            $bibliografia["imgpath"] = '/' . $filename;
            $bibliografia["imgurl"] = '/uploads/public/' . explode('/', $filename)[1] . '/' . explode('/', $filename)[2];
        }

        $bibliografiaEditar->id_tipo_bibliografia = Input::get('id_tipo_bibliografia');
        $bibliografiaEditar->id_autor = Input::get('id_autor');


        if ($request->documento != NULL) {
            $file = $request->documento;
            $filename = $file->store('public/bibliografia');

            if (!Storage::disk('public_uploads')->put('public/bibliografia', $file)) {
                return false;
            }

            $bibliografiaEditar->path = $filename;
            $bibliografiaEditar->url = '/uploads/public/' . explode('/', $filename)[1] . '/' . explode('/', $filename)[2];
        }

        $bibliografiaEditar->save();

        Alert()->success('Se edito correctamente!', 'Ejemplar Guardado!')->persistent('Cerrar');
        return Redirect('bibliografia');
    }

    public function CrearBibliografia(Request $request)
    {
        try {
            $bibliografia["nombre"] = $request["nombre"];
            $bibliografia["materia"] = $request["materia"];
            $bibliografia["ciudad_pais"] = $request["ciudad_pais"];
            $bibliografia["epilogo"] = $request["epilogo"];
            $bibliografia["editorial"] = $request["editorial"];


            if(!empty($request['img'])) {
                $file = $request->img;

                $filename = $file->store('public/bibliografia');

                if (!Storage::disk('public_uploads')->put('public/bibliografia', $file)) {
                    return false;
                }

                $bibliografia["imgpath"] = $filename;
                $bibliografia["imgurl"] = '/uploads/public/' . explode('/', $filename)[1] . '/' . explode('/', $filename)[2];
            }
            $bibliografia["id_tipo_bibliografia"] = $request["id_tipo_bibliografia"];
            $bibliografia["id_autor"] = $request["id_autor"];
            $bibliografia["habilitado"] = true;
            $bibliografia["num_descarga"] = 0;
            $bibliografia["path"] = null;
            $bibliografia["url"] = null;

            if ($request["virtual"] != NULL) {
                if ($request['documento'] != NULL) {
                    $file = $request->documento;
                    $filename = $file->store('public/bibliografia');

                    if (!Storage::disk('public_uploads')->put('public/bibliografia', $file)) {
                        return false;
                    }

                    $bibliografia["path"] = $filename;
                    $bibliografia["url"] = '/uploads/public/' . explode('/', $filename)[1] . '/' . explode('/', $filename)[2];
                    Bibliografia::create($bibliografia);
                }
            } elseif ($request["enlacevirtual"] != NULL) {

                if ($request['enlacelibro'] != NULL) {
                    $bibliografia["url"] = $request['enlacelibro'];
                    Bibliografia::create($bibliografia);
                }

            } else {
                $bibliografiaNueva = Bibliografia::create($bibliografia);
                $ejemplarId = $bibliografiaNueva["id"];
                $ejemplar["codigo_CS"] = $request["codigo_CS"];
                $ejemplar["anio"] = $request["anio"];
                $ejemplar["estado"] = 1;
                $ejemplar["edicion"] = $request["edicion"];
                $ejemplar["id_bibliografia"] = $ejemplarId;
                Ejemplar::create($ejemplar);
            }
            Alert()->success('Se creó correctamente!', 'Ejemplar Guardado!')->persistent('Cerrar');
            return Redirect('bibliografia');
        } catch (Exception $e) {
            throw $e;
        }
    }

    public function Eliminar(Request $request)
    {
        $id = $request["idBibliografia"];
        $ejemplares = count(Ejemplar::where('id_bibliografia', '=', $id)->where('estado', '=', '1')->get());
        if ($ejemplares != 0) {
            Alert()->error('La bibliografía tiene ejemplares activos', 'No se puede eliminar la bibliografía!')
                ->persistent('Cerrar');
            Return "ERROR";
        } else {
            $bibliografia = Bibliografia::find($id);
            $bibliografia->habilitado = 0;
            $bibliografia->save();
            Alert()->success('Se eliminó correctamente!', 'Bibliografía eliminada!')
                ->persistent('Cerrar');
        }
        return "TRUE";
    }

    public function EliminarEjemplar(Request $request)
    {
        $id = $request["id"];
        $estado = Ejemplar::find($id);
        if ($estado["estado"] != 1) {
            Return "ERROR";
        } else {
            $estado->estado = 0;
            $estado->save();
        }
        return "TRUE";
    }

    public function getCrearEjemplar(Request $request)
    {
        $id = $request["id"];
        $bibliografia = Bibliografia::find($id);
        return view('pages.Bibliografia._nuevo')->with('libro', $bibliografia);
    }

    public function getEditarEjemplar(Request $request)
    {
        $id = $request["id"];
        $ejemplar = Ejemplar::find($id);
        return view('pages.Bibliografia._editar')->with('ejemplar', $ejemplar);
    }

    public function CrearEjemplar(Request $request)
    {
        try {
            $bibliografia["codigo_CS"] = $request["codigo_CS"];
            $bibliografia["anio"] = $request["anio"];
            $bibliografia["edicion"] = $request["edicion"];
            $bibliografia["estado"] = 1;
            $bibliografia["id_bibliografia"] = $request["id"];
            Ejemplar::create($bibliografia);
            Alert()->success('Se creó correctamente!', 'Ejemplar Guardado!')->persistent('Cerrar');
            return Redirect('bibliografia/detalle/' . $request["id"]);
        } catch (QueryException $e) {
            Alert()->error('Hubo un problema!', 'Al parecer el codigo del ejemplar ya existe.')->persistent('Cerrar');
            return Redirect('bibliografia/detalle/' . $request["id"]);
        }
    }

    public function EditarEjemplar(Request $request)
    {
        try {
            $bibliografiaEditar = Ejemplar::find($request["id"]);
            $bibliografiaEditar->codigo_CS = Input::get('codigo_CS');
            $bibliografiaEditar->anio = Input::get('anio');
            $bibliografiaEditar->edicion = Input::get('edicion');
            $bibliografiaEditar->estado = 1;

            $bibliografiaEditar->save();

            Alert()->success('Se guardó correctamente!', 'Ejemplar Guardado!')->persistent('Cerrar');
            return Redirect('bibliografia/detalle/' . $bibliografiaEditar->id_bibliografia);
        } catch (QueryException $e) {
            Alert()->error('Hubo un problema!', 'Al parecer el codigo del ejemplar ya existe.')->persistent('Cerrar');
            return Redirect('bibliografia/detalle/' . $bibliografiaEditar->id_bibliografia);
        }

    }

    public function postCutterSanborn(Request $request)
    {

        $var = DB::table('ejemplar')->select('ejemplar.codigo_CS')->pluck('codigo_CS')->toArray();
        foreach ($var as $t) {
            if (strcmp($t, trim($request["code"])) === 0) {
                return response()->json(500);
            }
        }
        return response()->json(200);
    }


}
