<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Repositories\LocationRepository;
use App\Repositories\SourceRepository;

class FrontIndexController extends Controller
{
    protected $location;
    protected $source;

    public function __construct(
        LocationRepository $locationRepository,
        SourceRepository $sourceRepository
    ) {
        $this->location = $locationRepository;
        $this->source   = $sourceRepository;
    }

    public function start()
    {
        return view('front.index', [
            'count'       => count($this->location->getActiveLocations()),
            'sources'     => count($this->source->getActive()),
            'recent'      => $this->location->getRecent(),
            'latest_date' => $this->location->getRecent()[0]->updated_at->format('Y M d'),
            'title'       => "The Bad Space"
        ]);
    }

    public function indexSearch(Request $request)
    {
        return view('front.index', [
            'count'       => count($this->location->getActiveLocations()),
            'sources'     => count($this->source->getActive()),
            'recent'      => $this->location->getRecent(),
            'results'     => $this->location->search($request),
            'terms'       => $request->index_search,
            'latest_date' => $this->location->getRecent()[0]->updated_at->format('Y M d'),
            'title'       => "Search Results",
        ]);
    }

    public function about()
    {
        $sources = $this->source->getActive();
        return view('front.about', [
            'title'   => "ABOUT",
            'sources' => $sources
        ]);
    }

    public function appeals()
    {
        return view('front.appeals', [
            'title' => "LOCATION APPEALS",
        ]);
    }

    public function location(string $uuid = "1")
    {
        $location = $this->location->getLocation($uuid);
        $sources  = $this->source->getActive();
        $name     = "NO LOCATION FOUND";
        if ($location) {
            $name = $location->name;
        }
        return view('front.location', [
            'title'         => str_replace(".", " ", $name),
            'location'      => $location,
            'actions'       => $location->block_count + $location->silence_count,
            'sources_count' => count($sources),
            'images'        => json_decode($location->images),
            'updated'       => $location->updated_at->format('Y M d'),
        ]);
    }

    public function listings(int $pageNum = 1)
    {
        $listing = $this->location->getPage($pageNum);

        return view('front.listing', [
            'title'      => "Listings",
            'sources'    => count($this->source->getActive()),
            "totalPages" => $listing[1],
            "prev"       => $listing[2],
            "next"       => $listing[3],
            'pageNum'    => $pageNum,
            'locations'  => $listing[0]
        ]);
    }
}
