function($query) { $query->latest()->limit(1); }]) ->orderBy('updated_at', 'desc') ->get(); return view('admin.chat_support', compact('tickets')); } /** * Page 2: Open chat window for a specific user */ public function openChat($ticketId) { $ticket = SupportTicket::with('user')->findOrFail($ticketId); $messages = ChatMessage::where('ticket_id', $ticketId) ->orderBy('created_at', 'asc') ->with('sender') ->get(); return view('admin.chat_window', compact('ticket', 'messages')); } /** * Admin sends a message to the user (FIXED - LIVE CHAT) */ public function sendMessage(Request $request, $ticketId) { $request->validate([ 'message' => 'nullable|string', 'file' => 'nullable|file|max:20480', // 20 MB ]); $ticket = SupportTicket::findOrFail($ticketId); $admin = auth('admin')->user(); $data = [ 'ticket_id' => $ticketId, 'sender_id' => $admin->id, 'sender_type' => \App\Models\Admin::class, 'message' => $request->message, ]; // File Upload if ($request->hasFile('file')) { $path = $request->file('file')->store('chat', 'public'); $data['file_path'] = $path; $data['file_type'] = $request->file('file')->getMimeType(); } // Save message $message = ChatMessage::create($data); $message->load('sender'); \Log::info("DEBUG: ChatController sendMessage called", [ 'ticket_id' => $ticketId, 'payload' => $request->all() ]); // 🔥 LIVE CHAT - Queue bypass (100% working) broadcast(new NewChatMessage($message))->toOthers(); return response()->json([ 'success' => true, 'message' => $message ]); } }