<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use App\Http\Requests\Admin\ListasDifusionRequest;
use App\Http\Resources\DefaultCollection;
use App\Http\Resources\DefaultResource;
use App\Models\ListasDifusion;
use Faker\Core\Number;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Http\Request;
use Illuminate\Http\Response;

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

        $sort = request('sort', null);

        $result = ListasDifusion::query()
            ->selectFillable()
            ->with('grupos')
            ->applySorts($sort, 'id')
            ->filterLike(request('filter', []))
            ->orderByDesc('id') 
            ->paginate($size, ['id'], 'page[number]', $page);

        return DefaultCollection::make($result);
    }

    public function store(ListasDifusionRequest $request): DefaultResource
    {
        $result = ListasDifusion::create($request->all());

        $grupos_ids = request('grupos_ids', []);
        $result->grupos()->attach($grupos_ids);


        return DefaultResource::make($result);
    }

    public function edit($id): DefaultResource
    {
        $result = ListasDifusion::query()
            ->find($id);

        $result->grupos_ids = $result->grupos()->pluck('grupo_suscriptor_id');


        return DefaultResource::make($result);
    }

    public function update(ListasDifusionRequest $request,  $id): DefaultResource
    {
        $result = ListasDifusion::find($id);
        $result->fill($request->all())->save();

        $grupos_ids = request('grupos_ids', []);
        $result->grupos()->sync($grupos_ids);


        return DefaultResource::make($result);
    }

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

    public function listar(): Collection
    {
        return ListasDifusion::query()
            ->get();
    }
}
