<?php

namespace App\Http\Controllers\Api;

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

class ProveedorController extends ApiController
{
    public function index(Request $request)
    {
        $proveedores = Proveedor::with('tipos_proveedor')
            ->with('servicio')
            ->filter($request->all())
            ->orderBy('id', 'DESC')
            ->get();

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

    public function show($id)
    {
        $proveedor = Proveedor::with('tipos_proveedor')
            ->with('servicio')
            ->findOrFail($id);

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

    public function store(Request $request)
    {
        $reglas = [
            'nombre' => 'required',
            'descripcion' => 'required',
            'tipos_proveedor_id' => 'required|exists:tipos_proveedor,id',
            'servicio_id' => 'required|exists:servicios,id'
        ];

        $request->validate($reglas);

        $campos = $request->all();

        if ($request->has('logo')) $campos['logo'] = $request->logo->store('proveedor');

        $proveedor = Proveedor::create($campos);

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

    public function update(Request $request, $id)
    {
        $proveedor = Proveedor::findOrFail($id);

        $reglas = [
            'tipos_proveedor_id' => 'exists:tipos_proveedor,id',
            'servicio_id' => 'exists:servicios,id'
        ];

        $request->validate($reglas);

        $campos = $request->all();

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

        $proveedor->update($campos);

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

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

        $proveedor->delete();
        
        if (isset($proveedor->logo)) Storage::delete($proveedor->logo);

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