<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\ApiController;
use Illuminate\Http\Request;
use App\Novedad;
use Illuminate\Support\Facades\Storage;

class NovedadController extends ApiController
{
    public function index(Request $request)
    {
        $novedades = Novedad::with('tipo_novedad', 'proveedor')
        ->filter($request->all())
        ->orderBy('id', 'DESC')
        ->get();

        return $this->showAll($novedades);
    }

    public function show($id)
    {
        $novedad = Novedad::with('tipo_novedad')
            ->with('proveedor')
            ->findOrFail($id);

        return $this->showOne($novedad);
    }

    public function ultimas() 
    {
        $novedades = Novedad::with('tipo_novedad', 'proveedor')
            ->orderBy('id', 'DESC')
            ->get()
            ->take(5);

        return $this->showAll($novedades);
    }

    public function store(Request $request)
    {
        $reglas = [
            'titulo' => 'required',
            'copete' => 'required',
            'cuerpo' => 'required',
            'tipos_novedad_id' => 'required|exists:tipos_novedad,id',
            'proveedor_id' => 'exists:proveedores,id'
        ];

        $request->validate($reglas);

        $campos = $request->all();

        if ($request->has('imagen')) $campos['imagen'] = $request->imagen->store('novedad');

        $novedad = Novedad::create($campos);

        return $this->showOne($novedad);
    }

    public function update(Request $request, $id)
    {
        $novedad = Novedad::findOrFail($id);

        $reglas = [
            'tipos_novedad_id' => 'exists:tipos_novedad,id',
            'proveedor_id' => 'exists:proveedores,id'
        ];

        $request->validate($reglas);

        $campos = $request->all();

        // Imagen
        if ($request->hasFile('imagen')) {
            Storage::delete($novedad->imagen);
            $campos['imagen'] = $request->imagen->store('novedad');
        }
        else if (!isset($request->imagen)) {
            Storage::delete($novedad->imagen);
            $campos['imagen'] = null;
        }

        // Proveedor
        if (!is_null($novedad->proveedor_id) && !$request->has('proveedor_id')) {
            $novedad->proveedor_id = null;
        }

        $novedad->update($campos);

        return $this->showOne($novedad);
    }

    public function destroy($id)
    {
        $novedad = Novedad::findOrFail($id);

        $novedad->delete();

        if (isset($novedad->imagen)) Storage::delete($novedad->imagen);

        return $this->showOne($novedad);
    }
}
