<?php

namespace App\Libs\Services;

use App\Models\GenericBackoffice\WebsiteObject;

class SearchService
{
    public function search($q, $lang, $page = 1, $perPage = 7) {
        $escapedQuery = fulltext_search_term($q, false, false);

        return WebsiteObject::join('website_objects_search', 'website_objects_search.website_object_id', '=', 'website_objects.website_object_id')
            ->join('website_objects_lang', 'website_objects_lang.website_object_id', '=', 'website_objects.website_object_id')
            ->whereRaw("MATCH(website_objects_search.search_content) AGAINST (? IN BOOLEAN MODE)", [$escapedQuery])
            ->where('website_objects_search.language_id', $lang)
            ->where('website_objects_lang.wo_language_id', $lang)
            ->where('website_objects.status', 'published')
            ->select('website_objects.*', 'website_objects_search.id', 'website_objects_search.title', 'website_objects_search.search_content', 'website_objects_lang.lang_uri', 'website_objects_lang.lang_slug')
            ->orderByRaw("MATCH(website_objects_search.search_content) AGAINST (? IN BOOLEAN MODE) desc", [$escapedQuery])
            ->paginate($perPage, ['*'], 'page', $page);
    }
}
