import { useState, useEffect, useCallback } from 'react'; import { pb } from '@/services/pocketbase'; import type { Ticket } from '@/types/Ticket'; import type { TicketMessage } from '@/types/Message'; export const useTicketDetail = (ticketId?: string) => { const [ticket, setTicket] = useState(null); const [messages, setMessages] = useState([]); const [isLoading, setIsLoading] = useState(true); const [isSending, setIsSending] = useState(false); const [error, setError] = useState(null); const currentUser = pb.authStore.record; // ou .model selon votre version PocketBase const fetchTicketData = useCallback(async () => { if (!ticketId) return; setError(null); try { // 1. Récupération du ticket const ticketData = await pb.collection('aegis_tickets').getOne(ticketId); setTicket(ticketData); // 2. Récupération des messages associés const messageRecords = await pb.collection('aegis_ticket_messages').getFullList({ filter: `ticket = "${ticketId}"`, expand: 'author', sort: 'created', }); setMessages(messageRecords); } catch (err) { console.error("Erreur lors du chargement de la discussion :", err); setError("Ticket introuvable ou accès non autorisé."); } finally { setIsLoading(false); } }, [ticketId]); useEffect(() => { // eslint-disable-next-line react-hooks/set-state-in-effect fetchTicketData(); }, [fetchTicketData]); const sendMessage = async (content: string) => { if (!content.trim() || !currentUser || !ticketId) return; setIsSending(true); try { await pb.collection('aegis_ticket_messages').create({ ticket: ticketId, author: currentUser.id, content: content.trim(), }); await fetchTicketData(); // On recharge les messages après l'envoi } catch (error) { throw new Error("Impossible de charger le ticket", { cause: error }); } finally { setIsSending(false); } }; return { ticket, messages, isLoading, error, isSending, sendMessage, currentUser }; };