<?php

namespace App\Traits;

use App\Http\Resources\AbstractResource\AbstractDynamicCollection;
use App\Http\Resources\AbstractResource\AbstractDynamicResource;
use App\Http\Resources\ResourceResource;
use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\ResourceCollection;
use Log;
use Spatie\QueryBuilder\QueryBuilder;

trait HandlesPagination
{
    /**
     * Handle pagination for Spatie Query Builder
     * @param QueryBuilder $query The QueryBuilder instance
     * @param Request $request The request object
     * @param string $collectionClass The class name of the resource collection
     * @return ResourceCollection
     */
    public function handlePagination(QueryBuilder $query, Request $request, string $collectionClass): ResourceCollection
    {
        if ($request->query('paginate', true) !== 'false') {
            $data = $query->paginate($request->query('per_page', 10));
        } else {
            $data = $query->get();
        }

        return new $collectionClass($data);
    }

    public function handleDynamicPagination( $query, Request $request, string $collectionClass)
    {
        $perPage = $request->query('per_page', 10);

        if ($request->input('single')){
            $data = $query->get();
        }
        elseif ($request->query('paginate', true) !== 'false') {
            $data = $query->paginate($perPage, ['*'], 'page', $request->get('page'));
        }
        else {
            $data = $query->get();
        }

        return new $collectionClass($data);
    }
}
