from django.shortcuts import render, redirect, get_object_or_404 from django.contrib import messages from .forms import InquiryForm from .models import LiveChat, ChatMessage from django.contrib.auth.decorators import login_required from django.utils import timezone from django.core.mail import send_mail from django.urls import reverse from django.http import JsonResponse from django.views.generic import View from django.contrib.auth.mixins import LoginRequiredMixin import json # Ensure you import json for handling JSON data class LiveChatView(LoginRequiredMixin, View): def get(self, request, *args, **kwargs): # Render the live chat interface return render(request, 'contacts/live_chat.html') def post(self, request): data = json.loads(request.body) # Load JSON data message_text = data.get('message') chat_id = data.get('chat_id') # Make sure to send chat_id in your JS if message_text and chat_id: chat = get_object_or_404(LiveChat, id=chat_id, user=request.user) ChatMessage.objects.create(chat=chat, sender=request.user, message=message_text) chat.last_message = timezone.now() chat.save() return JsonResponse({'status': 'Message sent', 'reply': 'Your message was received.'}) return JsonResponse({'status': 'Error', 'message': 'Invalid data'}, status=400) def send_inquiry(request): if request.method == 'POST': form = InquiryForm(request.POST) if form.is_valid(): form.save() messages.success(request, 'Your inquiry has been sent successfully!') if request.headers.get('X-Requested-With') == 'XMLHttpRequest': return JsonResponse({'status': 'success', 'redirect_url': reverse('contacts:index')}) return redirect('contacts:index') else: form = InquiryForm() return render(request, 'contacts/send_inquiry.html', {'form': form}) @login_required def start_chat(request): chat, created = LiveChat.objects.get_or_create(user=request.user, active=True) if created: admin_email = 'thimethane@outlook.com' subject = f"New Live Chat Request from {request.user.username}" message = ( f"A new live chat has been initiated by {request.user.username}.\n" f"Visit the dashboard to view and respond to the chat:\n" f"{request.build_absolute_uri(reverse('admin:contacts_livechat_change', args=[chat.id]))}" ) send_mail(subject, message, 'no-reply@thimethane.com', [admin_email]) return redirect('contacts:chat', chat_id=chat.id) @login_required def chat_view(request, chat_id): chat = get_object_or_404(LiveChat, id=chat_id, user=request.user) messages = chat.messages.all() # Fetch all messages related to this chat if request.method == 'POST': message_text = request.POST.get('message') if message_text: ChatMessage.objects.create(chat=chat, sender=request.user, message=message_text) chat.last_message = timezone.now() chat.save() if request.headers.get('X-Requested-With') == 'XMLHttpRequest': return JsonResponse({'status': 'Message sent', 'sender': request.user.username, 'message': message_text}) return render(request, 'contacts/chat_view.html', {'chat': chat, 'messages': messages}) @login_required def index(request): messages.info(request, "You need to log in to access this page.") return render(request, 'contacts/index.html') @login_required def admin_chat_view(request): if request.method == 'POST': message = request.POST.get('message') chat_id = request.POST.get('chat_id', None) if message and chat_id: try: chat = LiveChat.objects.get(id=chat_id) ChatMessage.objects.create(chat=chat, sender=request.user, message=message) chat.last_message = timezone.now() chat.save() return JsonResponse({'status': 'Message sent'}) except LiveChat.DoesNotExist: return JsonResponse({'status': 'Error', 'message': 'Chat not found'}, status=404) else: return JsonResponse({'status': 'Error', 'message': 'Invalid data'}, status=400) return JsonResponse({'status': 'Error', 'message': 'Invalid request method'}, status=405) @login_required def admin_chat_list(request): chats = LiveChat.objects.filter(active=True) return render(request, 'contacts/admin_chat_list.html', {'chats': chats})