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, )