<?php

namespace App\Http\Controllers\Api;

use App\Http\Requests\Api\Faqs;
use App\Http\Controllers\Controller;
use App\Models\Faq;
use App\Models\GenericBackoffice\Entry;
use App\Models\FaqCategory;
use App\Http\Resources\Faq as FaqResource;
use App\Http\Resources\FaqCategory as FaqCategoryResource;

class FaqsController extends Controller
{

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function view($id)
    {
        $faq = Faq::find($id);
        if (!$faq) {
            return;
        }
        $faq->views++;
        $faq->save();
    }

    /**
     * Lists faqs
     *
     * @return \Illuminate\Http\Response
     */
    public function list(Faqs $request)
    {
        $data = $request->validated();
        $query = Faq::full()
            ->where('status', 'published')
            ->orderBy('views', 'DESC');
          
        if (!empty($data['categoryId'])) {
            $query->where('faq_category_id', $data['categoryId']);
        }

        if (!empty($data['categorySlug'])) {
            $category = FaqCategory::full()
                ->where('status', 'published')
                ->where('lang_slug', $data['categorySlug'])
                ->first();
            $query->where('faq_category_id', $category->id);
        }

        if (!empty($data['search'])) {
            $query->search($data['search']);
        }

        $supportPage = Entry::full()->where('slug', 'support')->first();
        $supportBase = null;
        if ($supportPage) {
            $supportBase = [
                'title' => $supportPage->title,
                'uri' => $supportPage->lang_uri
            ];
        }

        $faqs = $query->get();
        return [
            'base' => $supportBase,
            'faqs' => FaqResource::collection($faqs)
        ];
    }

    /**
     * Category data
     *
     * @return \Illuminate\Http\Response
     */
    public function faqCategory($categorySlug)
    {
        $category = FaqCategory::full()
            ->with(['faqs' => function ($query) {
                $query->full()
                  ->where('status', 'published')
                  ->orderBy('views', 'desc');
            }])
            ->where('status', 'published')
            ->where('lang_slug', $categorySlug)
            ->first();
        return new FaqCategoryResource($category);
    }
}
