<?php

namespace MovieSite\MovieSite\Http\Controllers;

use App\Http\Controllers\PublicController as BaseController;
use App\Http\Requests\PublicRequest;
use Litepie\Repository\Filter\RequestFilter;

use MovieSite\MovieSite\Interfaces\MovieSiteRepositoryInterface;
use MovieSite\MovieSite\Repositories\Eloquent\Filters\MovieSitePublicFilter;
use MovieSite\MovieSite\Repositories\Eloquent\Presenters\MovieSiteListPresenter;

class MovieSitePublicController extends BaseController
{

    /**
     * Constructor.
     *
     * @return void
     */
    public function __construct(
        MovieSiteRepositoryInterface $movie_site
    ) {
        parent::__construct();
        $this->modules = $this->modules(config('movie_site.movie_site.modules'), 'movie_site', guard_url('movie_site'));
        $this->repository = $movie_site;
    }

    /**
     * Show movie_site's list.
     *
     * @return response
     */
    protected function index(PublicRequest $request)
    {

        $search = $request->search;
        $pageLimit = $request->input('pageLimit', config('database.pagination.limit'));
        $data = $this->repository
            ->pushFilter(RequestFilter::class)
            ->pushFilter(MovieSitePublicFilter::class)
            ->setPresenter(MovieSiteListPresenter::class)
            ->select('movie_sites.*')
            ->paginate($pageLimit)
            ->withQueryString()
            ->toArray();

        extract($data);

        $categories = [];
        $tags = [];
        $recent = [];

        return $this->response->setMetaTitle(trans('movie_site::movie_site.names'))
            ->view('movie_site::public.movie_site.index')
            ->data(compact('data', 'meta', 'categories', 'tags', 'recent'))
            ->output();
    }

    /**
     * Show movie_site.
     *
     * @param string $slug
     *
     * @return response
     */
    protected function show(PublicRequest $request, $slug)
    {
        $data = $this->repository
            ->findBySlug($slug)
            ->toArray();

        $categories = [];
        $tags = [];
        $recent = [];
    
        return $this->response->setMetaTitle($data['title'] . trans('movie_site::movie_site.name'))
            ->view('movie_site::public.movie_site.show')
            ->data(compact('data', 'categories', 'tags', 'recent'))
            ->output();
    }

}