# (c) cavaliba.com  - data/api - search.py

"""
/api/search/: global single-term cross-schema search - same engine
(app_data.search.searchbar) as the top navbar searchbar UI.

Method inventory: search.
"""

from django.views.decorators.csrf import csrf_exempt

import app_data.api.helper as helper
from app_data.api.aaa import start_api
from app_data.search import searchbar
from app_home.log import DEBUG, ERROR, log

# permission: p_data_access


#  ----------------------------------------------------------------------------
# /api/search/
#  ----------------------------------------------------------------------------
@csrf_exempt
def search(request):
    """Return searchbar() results for ?query=, permission-filtered per matched
    instance/schema for the calling apikey."""

    aaa_api = start_api(request, permission="p_data_access")
    if not aaa_api["is_allowed"]:
        log(ERROR, aaa=aaa_api, app="api/search", view="search", action=request.method,
            status="KO", data="denied")  # fmt: skip
        return helper.send_denied(aaa_api["error"])

    query = (request.GET.get("query") or "").strip()

    reply = searchbar(query=query, aaa=aaa_api)

    if reply["error"]:
        log(ERROR, aaa=aaa_api, app="api/search", view="search", action="GET", status="KO",
            data=f"query={query} error={reply['error']}")  # fmt: skip
        return helper.send_error(reply["error"], 400)

    log(DEBUG, aaa=aaa_api, app="api/search", view="search", action="GET", status="OK",
        data=f"query={query} results={len(reply['results'])}")  # fmt: skip

    return helper.send_response(request, reply, 200)
