<?php

namespace App\Http\Controllers;

use App\Http\Requests\ComercioRequest;
use App\Http\Resources\DefaultCollection;
use App\Http\Resources\DefaultResource;
use App\Models\Comercio;
use Illuminate\Http\Request;
use Illuminate\Support\Str;

class ComercioController extends Controller
{
    public function index(): DefaultCollection
    {
        $size = request('page.size', 10);
        $page = request('page.number', 1);

        $result = Comercio::from('comercios as c')
            ->join('planes as p', 'p.id', 'c.plan_id')
            ->select(
                'c.id',
                'c.titulo',
                'c.descripcion',
                'c.imagen',
                'c.plan_id',
                'p.titulo as plan_titulo',
                'c.estado',
                'c.updated_at'
            )
            ->filterLike(request('filter', []))
            ->applySorts(request('sort'))
            ->paginate(
                $perPage = $size,
                $columns = ['titulo'],
                $pageName = 'page[number]',
                $page = $page
            )->appends(request()->only('sort', 'page.size', 'filter'));


        return DefaultCollection::make($result);
    }

    public function store(ComercioRequest $request): DefaultResource
    {
        $input = array_merge($request->input('data.attributes'), [
            'slug' => Str::slug($request->input('data.attributes.titulo', ''))
        ]);

        $result = Comercio::create($input);
        return DefaultResource::make($result);
    }

    public function update(ComercioRequest $request, $id): DefaultResource
    {
        $input = array_merge($request->input('data.attributes'), [
            'slug' => Str::slug($request->input('data.attributes.titulo', ''))
        ]);

        $result = Comercio::find($id);
        $result->fill($input)
            ->save();

        return DefaultResource::make($result);
    }

    public function destroy($id)
    {
        Comercio::find($id)->delete();
        return response()->noContent();
    }
}
