<?php

namespace App\Services;


use App\Libs\Api\ParsedListParams;
use Illuminate\Database\Eloquent\Builder;
use MatanYadaev\EloquentSpatial\Objects\Point;

class DataService
{


    /**
     * Applies default params in the filters if they are present
     *
     * @param Builder $query
     * @param ParsedListParams $params
     * @return void
     */
    protected function applyDefaultFilters(Builder $query, ParsedListParams $params): void
    {
        $query->where('status', 'published');

        if (isset($params->filters['ids'])) {
            $query->wherein('id', $params->filters['ids']);
        }
    }


    /**
     * Applies the location filters to the query to models with geo coordinates field
     *
     * @param Builder &$query
     * @param ParsedListParams $params
     * @return void
     */
    public function applyLocationFilters(Builder $query, ParsedListParams $params): void
    {

        // Coordinates filter
        if (
            isset($params->filters['latitude'])
            && isset($params->filters['longitude'])
        ) {

            $radius = config('api.default_radius');
            if (isset($params->filters['radius'])) {
                $radius = $params->filters['radius'];
            }

            $point = new Point($params->filters['latitude'], $params->filters['longitude']);

            $query->whereDistanceSphere('map_position', $point, '<', $radius);
        }
    }
}
