<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Http\Requests\CourseValidation;

use App\Models\Course;
use App\Utilities\Paginate;
use App\Utilities\SearchResult;

use App\Traits\PagesControllerTrait;

class CoursesController extends Controller
{
    use PagesControllerTrait;

    protected function getModel()
    {
        return new Course();
    }

    protected function getValidation()
    {
        return (new CourseValidation());
    }

    protected function findPage($path)
    {
        return (new Course())->findByFullSlug($path);
    }

    public function index()
    {
        if (!auth()->user()->can('viewAny', Course::class)) {
            return redirect('/')->with('error', 'You do not have access to view Courses');
        }

        //$courses = Course::with('tags')->get();

        if (auth()->user()?->hasRole('courses-manager')) {
            if (!editing()) {
                auth()->user()->enableEditing();
            }
        }

        /*
        if (request()->expectsJson()) {
            return response()->json([
                'courses' => $courses,
            ]);
        }
         */

        return view('courses.index');
    }

    public function search()
    {
        request()->validate([
            'terms' => 'required|min:3',
        ]);

        $terms = SearchResult::collectTerms();
        $search_results = Course::searchResults($terms);

        if ($search_results->count()) {
            $courses = Course::whereIn('id', $search_results->pluck('id')->toArray())->get();
        } else {
            $courses = collect();
        }

        return Paginate::create((new Course())->loadCollectionAttributes($courses));
    }

    public function paginate()
    {
        return (new Course())->paginateByTags(request());
    }
}
