<?php

namespace App\Http\Controllers;

use App\Model\Investigacion;
use App\Model\InvestigacionUsuario;
use App\Model\User;
use App\Model\CampoInvestigacion;
use Carbon\Carbon;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Providers\SweetAlertServiceProvider;

use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Storage;
use Response;

class InvestigacionController extends Controller
{

    public function Index()
    {

        $query = DB::Select(
            DB::raw("
                    select i.id ,i.nombre , GROUP_CONCAT(concat(u.nombres,' ',u.apellido_paterno) SEPARATOR ', ') as nombres, i.path, i.estado, i.fecha_publicacion, i.imgurl
                    from investigacion i 
                    right join investigacion_usuario iu on i.id = iu.id_investigacion 
                    join usuario u on u.id = iu.id_usuario 
                    join campo_investigacion ci on ci.id = i.id_campo_investigacion
                    group by i.id,i.nombre,i.path,i.estado,i.fecha_publicacion, i.imgurl
            "));

        $users = User::orderBy('nombres')->select(DB::raw('CONCAT(`apellido_paterno`," ",`apellido_materno`,", ",`nombres` ) as name'), 'id')->pluck('name', 'id');
        $campos = CampoInvestigacion::all()->pluck('descripcion', 'id');

        return view('pages.investigaciones.index', compact('query', 'users', 'campos'));

    }

    public function crearInvestigacion(Request $request)
    {

        $this->validate($request, [
            'nombre' => 'required',
            'fecha_publicada' => 'required',
            'campo_investigacion' => 'required',
            'users' => 'required'
        ]);

        $file = $request->archivo;
        $filename = $file->store('public/investigacion');

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

        if ($request["publicado"] == "true") {
            $estado = 1;
        } else {
            $estado = 0;
        }

        $fileimg = $request->img;
        $fileimgname = $fileimg->store('public/investigacion');

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

        $objInvestigacion = [
            "nombre" => $request["nombre"],
            "created_at" => Carbon::now('America/Lima'),
            "updated_at" => Carbon::now('America/Lima'),
            "fecha_publicacion" => $request["fecha_publicada"],
            "estado" => $estado,
            "nombre_revista" => $request["nombre_revista"],
            "url" => '/uploads/public/' . explode('/', $filename)[1] . '/' . explode('/', $filename)[2],
            "path" => '/' . $filename,
            "imgurl" => '/uploads/public/' . explode('/', $fileimgname)[1] . '/' . explode('/', $fileimgname)[2],
            "imgpath" => '/' . $fileimgname,
            "id_campo_investigacion" => $request["campo_investigacion"],
            "num_descarga" => 0
        ];

        $investigacionID = Investigacion::create($objInvestigacion)->id;

        foreach ($request["users"] as $item) {
            $objInvestigacionUsuario = [
                "id_usuario" => $item,
                "id_investigacion" => $investigacionID
            ];
            InvestigacionUsuario::create($objInvestigacionUsuario);
        }

        Alert()->success('Se registro la investigación correctamente!', 'Registro realizado!')->persistent('Cerrar');

        return redirect('investigaciones');

    }

    public function Detalle($InvestigacionID)
    {

        $Investigacion = Investigacion::find($InvestigacionID);
        $CampoInvestigacion = CampoInvestigacion::all()->pluck('descripcion', 'id');
        $Users = User::orderBy('nombres')->select(DB::raw('CONCAT(`apellido_paterno`," ",`apellido_materno`,", ",`nombres` ) as name'), 'id')->pluck('name', 'id');

        $CampoInvestigacionInv = DB::table('campo_investigacion')
            ->where('id', '=', $Investigacion->id_campo_investigacion)
            ->select('id', 'descripcion')->get();

        $UserInv = DB::table('investigacion_usuario')
            ->join('usuario', 'investigacion_usuario.id_usuario', '=', 'usuario.id')
            ->where('investigacion_usuario.id_investigacion', '=', $Investigacion->id)
            ->select('usuario.id')->pluck('id')->toArray();


        return view('pages.investigaciones.detalle')->with('Investigacion', $Investigacion)->with('CampoInvestigacion', $CampoInvestigacion)
            ->with('Users', $Users)->with('CampoInvestigacionInv', $CampoInvestigacionInv)->with('UserInv', $UserInv);

    }

    public function Actualizar(Request $request)
    {

        $this->validate($request, [
            'nombre' => 'required',
            'fecha_publicacion' => 'required',
            'id_campo_investigacion' => 'required'
        ]);

        $result = Investigacion::find($request["id"]);
        $result->nombre = $request["nombre"];
        $result->fecha_publicacion = $request["fecha_publicacion"];
        if ($request["estado"] == "true") {
            $estado = 1;
        } else {
            $estado = 0;
        }
        $result->estado = $estado;
        $result->nombre_revista = $request["nombre_revista"];

        if (!empty($request->archivo)) {

            $file = $request->archivo;
            $filename = $file->store('public/investigacion');

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

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

        if (!empty($request->img)) {

            $fileimg = $request->img;
            $filenameimg = $fileimg->store('public/investigacion');

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

            $result->imgpath = '/' . $filenameimg;
            $result->imgurl = '/uploads/public/' . explode('/', $filenameimg)[1] . '/' . explode('/', $filenameimg)[2];

        }

        $result->id_campo_investigacion = $request["id_campo_investigacion"];
        $result->updated_at = Carbon::now('America/Lima');

        $result->save();

        $Investigacion_Usuario = DB::table('investigacion_usuario')
            ->where('investigacion_usuario.id_investigacion', '=', $request["id"])->get();

        foreach ($Investigacion_Usuario as $item) {
            $result = InvestigacionUsuario::find($item->id);
            $result->delete();
        }

        foreach ($request["users"] as $item) {
            $objInvestigacionUsuario = [
                "id_usuario" => $item,
                "id_investigacion" => $request["id"]
            ];
            InvestigacionUsuario::create($objInvestigacionUsuario);
        }

        Alert()->success('Se actualizo correctamente!', 'Cambio realizado!')->persistent('Cerrar');
        return redirect('investigaciones');

    }

    public function Eliminar($investigacionID)
    {

        $objCampo = Investigacion::find($investigacionID);
        $objCampo->delete();

        alert()->success('Se eliminó la investigación.', 'Éxito!');
        return redirect('investigaciones');

    }

    public function enlacepdf($InvestigacionID)
    {
        $investigacion = Investigacion::find($InvestigacionID);
        $investigacion->num_descarga = $investigacion->num_descarga + 1;
        $investigacion->save();

        $pathInv = explode('/', $investigacion->path);

        $filename = $pathInv[3];

        $path = storage_path() . DIRECTORY_SEPARATOR . 'app' . DIRECTORY_SEPARATOR . 'public' . DIRECTORY_SEPARATOR . 'investigacion' . DIRECTORY_SEPARATOR . $filename;

        return Response::make(file_get_contents($path), 200, [
            'Content-Type' => 'application/pdf',
            'Content-Disposition' => 'inline; ' . $filename,
        ]);
    }

}
