<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Filtros\FiltroDeSubpedido;
use App\Subpedido;
use App\GrupoDeCompra;
use App\Http\Resources\SubpedidoResource;
use Illuminate\Validation\Rule;
use Symfony\Component\HttpKernel\Exception\HttpException;


class SubpedidoController extends Controller
{
    /**
     * Mostrar una lista de productos.
     *
     * @param App\Filtros\FiltroDeSubpedido $filtros
     * @param \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function index(FiltroDeSubpedido $filtros, Request $request)
    {
        return Subpedido::filtrar($filtros)->get();
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request  $request)
    {
        $validado = $this->validateSubpedido();
        if (Subpedido::where("nombre",$validado["nombre"])->where("grupo_de_compra_id",$validado["grupo_de_compra_id"])->get()->count()) {
            throw new HttpException(400, "Ya existe un subpedido con este nombre");
        }
        $s = new Subpedido();
        $s->nombre = $validado["nombre"];
        $s->grupo_de_compra_id = $validado["grupo_de_compra_id"];
        $s->save();
        return $s;
    }

    protected function validateSubpedido(){
        return request()->validate([
            'nombre'                => 'required|max:255',
            'grupo_de_compra_id'    => [
                'required',
                Rule::in(GrupoDeCompra::all()->pluck('id')),
            ]
        ]);
    }

    /**
     * Display the specified resource.
     *
     * @param  \App\Subpedido  $subpedido
     * @return \Illuminate\Http\Response
     */
    public function show(Subpedido $subpedido)
    {
        return new SubpedidoResource($subpedido);
    }
}