"""Core views — Global Search."""
from rest_framework.response import Response
from rest_framework.views import APIView

from core.utils.search import global_search


class GlobalSearchView(APIView):
    """
    Global search across all ERP modules.
    GET /api/search/?q=john&modules=employees,projects
    """

    def get(self, request):
        query = request.query_params.get("q", "").strip()
        modules_param = request.query_params.get("modules", "")
        modules = [m.strip() for m in modules_param.split(",") if m.strip()] or None

        if not query or len(query) < 2:
            return Response({"results": {}, "query": query})

        if not hasattr(request, "organization") or not request.organization:
            return Response({"results": {}, "query": query})

        results = global_search(query, request.organization, modules)
        return Response({"results": results, "query": query})


class DatabaseHealthView(APIView):
    """
    Internal API to expose database health and capabilities.
    Requires SUPER_ADMIN permissions.
    """
    def get(self, request):
        if request.user.role != "SUPER_ADMIN":
            from rest_framework.exceptions import PermissionDenied
            raise PermissionDenied("Only SUPER_ADMIN can access database health.")

        from core.database import (
            get_database_metadata,
            check_database_health,
            get_database_capabilities
        )

        metadata = get_database_metadata()
        health = check_database_health()
        capabilities = get_database_capabilities()

        return Response({
            "engine": metadata.get("engine"),
            "version": metadata.get("version"),
            "driver": metadata.get("driver"),
            "connected": health.get("connected"),
            "latency_ms": health.get("latency_ms"),
            "capabilities": capabilities,
        })
