haikal/haikalbot/views.py
2025-06-22 13:25:54 +03:00

69 lines
2.4 KiB
Python

from django.contrib.auth.mixins import LoginRequiredMixin
from django.http import JsonResponse
from django.shortcuts import render
from django.utils.translation import gettext as _
from django.views import View
import logging
from .ai_agent import analyze_prompt
# from .haikal_agent import DatabaseInsightSystem, analyze_prompt_sync
from .utils.export import export_to_excel, export_to_csv
logger = logging.getLogger(__name__)
# analyze_prompt_ai = DatabaseInsightSystem
class HaikalBot(LoginRequiredMixin, View):
def get(self, request, *args, **kwargs):
"""
Render the chat interface.
"""
context = {
"dark_mode": request.session.get("dark_mode", False),
"page_title": _("AI Assistant"),
}
return render(request, "haikalbot/chat.html", context)
def post(self, request, *args, **kwargs):
"""
Process the prompt and return results.
"""
prompt = request.POST.get("prompt")
export = request.POST.get("export")
language = request.POST.get("language", request.LANGUAGE_CODE)
if not prompt:
error_msg = (
_("Prompt is required.") if language != "ar" else "الاستعلام مطلوب."
)
return JsonResponse({"status": "error", "error": error_msg}, status=400)
try:
result = analyze_prompt(prompt)
if export and result.get("status") == "success" and result.get("data"):
try:
if export == "excel":
return export_to_excel(result["data"])
elif export == "csv":
return export_to_csv(result["data"])
except Exception as e:
logger.error(f"Export error: {e}")
result["export_error"] = str(e)
return JsonResponse(result, safe=False)
except Exception as e:
logger.exception(f"Error processing prompt: {e}")
error_msg = _("An error occurred while processing your request.")
if language == "ar":
error_msg = "حدث خطأ أثناء معالجة طلبك."
return JsonResponse(
{
"status": "error",
"error": error_msg,
"details": str(e) if request.user.is_staff else None,
},
status=500,
)