<?php

namespace App\Services;

use App\Models\Backoffice\Resource;

class ResourceService
{
    /**
     * Get resources
     *
     * @param array $params
     * @return array
     */
    public function getResources(array $params)
    {
        $query = Resource::full()->select('resources.*');

        if (!empty($params['cityId'])) {
            $query->whereHas('cities', function ($q) use ($params) {
                $q->where('id', $params['cityId']);
            });
        }

        if (!empty($params['type'])) {
            $query->where('resources.type', $params['type']);
        }

        $perPage = $params['perPage'] ?? 300;
        $page = $params['page'] ?? 1;

        $resources = $query->paginate($perPage, ['*'], 'page', $page);

        $paginationData = [
            'currentPage' =>  intval($resources->currentPage()),
            'lastPage' => intval($resources->lastPage()),
            'perPage' =>  intval($resources->perPage()),
            'total' =>  intval($resources->total()),
            'count' =>  intval($resources->count()),
            'hasMorePages' => $resources->hasMorePages(),
            'nextPageUrl' => $resources->nextPageUrl(),
            'prevPageUrl' => $resources->previousPageUrl(),
        ];

        return [
            'resources' => $resources,
            'pagination' => $paginationData,
        ];
    }

    /**
     * Get resource by slug
     *
     * @param string $slug
     * @return Resource
     */
    public function getResourceBySlug(string $slug)
    {
        $resource = Resource::full()
            ->where('slug', $slug)
            ->first();

        return $resource;
    }
}
