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