haikal/haikalbot/views.py
Marwan Alwali 56cfbad80e update
2025-05-29 21:42:27 +03:00

64 lines
2.3 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 .utils.export import export_to_excel, export_to_csv
logger = logging.getLogger(__name__)
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)
# Handle export requests if data is available
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)