<?php

namespace App\Repositories;

use App\Models\Location;
use Illuminate\Support\Facades\DB;

class LocationRepository
{
    protected $model;
    private $limit = 15;

    public function __construct(Location $model)
    {
        $this->model = $model;
    }

    public function search($request)
    {
        // this grabs the search results from the db
        $terms     = $request->index_search;
        $rawSearch = $terms;
        $terms     = str_replace(",", "", $terms);
        $terms     = str_replace(" ", "|", $terms);
        $raw       = DB::select("SELECT * FROM searchlocations(?)", [$terms]);
        $results   = [];
        foreach ($raw as $item) {
            if (($item->block_count + $item->silence_count) >= 2) {
                array_push($results, $item);
            }
        }

        return $results;
    }

    public function getLocation($uuid)
    {
        return $this->model::where("uuid", $uuid)->first();
    }

    public function getActiveLocations()
    {
        return $this->model::where("active", true)->where('actions_count', '>=', 2)->get();
    }

    public function getRecent()
    {
        return $locations = $this->model::where("active", true)->where('actions_count', '>=', 2)
            ->orderByDesc('updated_at')->limit(10)->get();
    }

    public function getPage($pageNum)
    {
        $range     = $pageNum * $this->limit - $this->limit;
        $active    = $this->model::where("active", true)->where('actions_count', '>=', 2)->get();
        $locations = $this->model::where("active", true)->where('actions_count', '>=', 2)
            ->limit($this->limit)->offset($range)->orderBy('id', 'asc')->get();
        $pageCount = ceil(count($active) / $this->limit);

        $next = $pageNum + 1;
        if ($next > $pageCount) {
            $next = 1;
        }

        $prev = $pageNum - 1;

        if ($prev <= 0) {
            $prev = $pageCount;
        }

        return $result = [$locations, $pageCount, $prev, $next];
    }
}
