<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Proveedor;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\File; 

class ProveedorController extends Controller
{

    public function index(Request $request)
    {
        $filtro = $request->get('filtro');
        $paginar = $request->get('paginar') === 'true';
        $perPage = $request->get('perPage');
        
        $proveedores = Proveedor::orderBy('id', 'DESC')
            ->orWhere('nombre', 'LIKE', '%'.$filtro.'%')
            ->orWhere('direccion', 'LIKE', '%'.$filtro.'%')
            ->orWhere('telefono', 'LIKE', '%'.$filtro.'%')
            ->orWhere('email', 'LIKE', '%'.$filtro.'%')
            ->orWhere('web', 'LIKE', '%'.$filtro.'%')
            ->with('tipos_proveedor')
            ->with('servicio');
        
        if ($paginar)
        {
            $proveedores = $proveedores->paginate($perPage);
            $paginacion =
            [
                'total'         => $proveedores->total(),
                'pagina_actual' => $proveedores->currentPage(),
                'por_pagina'    => $proveedores->perPage(),
                'ultima_pagina' => $proveedores->lastPage(),
                'desde'         => $proveedores->firstItem(),
                'hasta'         => $proveedores->lastItem(),
            ];
        }
        else {
            $proveedores = $proveedores->get();
            $paginacion = [];
        }
        
        return [
            'paginacion' => $paginacion,
            'proveedores' => $proveedores
        ];
    }

    public function store(Request $request)
    {
        $this->validate($request, [
            'nombre'    => 'required',
            'descripcion' => 'required',
            'servicio_id' => 'required'
        ]);
        
        $proveedor = Proveedor::create($request->all());

        if($request->hasFile('logo')) {
            $path = Storage::disk('public')->put('img/proveedores', $request->file('logo'));

            $proveedor->logo = asset($path);
            $proveedor->save();
        }

        return;
    }

    public function show($id)
    {
        return Proveedor::find($id);
    }

    public function update(Request $request, $id)
    {
        $this->validate($request, [
            'nombre'    => 'required',
            'descripcion' => 'required',
            'servicio_id' => 'required'
        ]);

        $proveedor = Proveedor::find($id);

        //Si se agrega o cambia la imágen
        if (!is_null($request->fileLogo)) {

            //Si se cambia
            if (!is_null($proveedor->logo)) Storage::disk('public')->delete($proveedor->logo);

            $path = Storage::disk('public')->put('img/proveedores', $request->file('fileLogo'));

            $proveedor->logo = $path;
        }
        //Si se borra
        else if (is_null($request->logo) && !is_null($proveedor->logo)){

            Storage::disk('public')->delete($proveedor->logo);
            
            $proveedor->logo = null;
        }

        $proveedor->nombre = $request->nombre;
        $proveedor->tipos_proveedor_id = $request->tipos_proveedor_id;
        $proveedor->direccion = $request->direccion;
        $proveedor->mapa = $request->mapa;
        $proveedor->telefono = $request->telefono;
        $proveedor->email = $request->email;
        $proveedor->descripcion = $request->descripcion;
        $proveedor->web = $request->web;
        $proveedor->youtube = $request->youtube;
        $proveedor->servicio_id = $request->servicio_id;
        
        $proveedor->save();

        return;
    }

    public function destroy($id)
    {
        $proveedor = Proveedor::find($id);

        $proveedor->delete();
    }
}
