/** * Hooks para tracking de telemetria */ import { useCallback, useEffect, useRef } from "react"; import { getTelemetry } from "../telemetry/MarketTelemetry"; import { useSession } from "./use-session"; /** * Hook para tracking automático de visualização de anúncio */ export function useAdTracking(adId: number | null) { const startTimeRef = useRef(null); const { user } = useSession(); useEffect(() => { if (!adId) return; const telemetry = getTelemetry(user?.userId); startTimeRef.current = Date.now(); telemetry.trackAdView(adId); return () => { if (startTimeRef.current && adId) { telemetry.trackAdExit(adId); } }; }, [adId, user?.userId]); } /** * Hook para tracking global do marketplace */ export function useMarketTelemetry() { const { user } = useSession(); const telemetryRef = useRef(getTelemetry(user?.userId)); // Atualizar user_id quando mudar useEffect(() => { if (user?.userId) { telemetryRef.current.setUserId(user.userId); } }, [user?.userId]); // Cleanup ao desmontar useEffect(() => { return () => { telemetryRef.current.stop(); }; }, []); const trackSearch = useCallback( (query: string, filters?: Record) => { telemetryRef.current.trackSearch(query, filters); }, [], ); const trackFilter = useCallback((filters: Record) => { telemetryRef.current.trackFilterApplied(filters); }, []); const trackFavorite = useCallback( (adId: number, action: "favorite" | "unfavorite") => { telemetryRef.current.trackFavorite(adId, action); }, [], ); const trackPurchase = useCallback((adId: number, price: number) => { telemetryRef.current.trackPurchase(adId, price); }, []); const trackInquiry = useCallback((adId: number) => { telemetryRef.current.trackInquiry(adId); }, []); const trackPageView = useCallback((page: string) => { telemetryRef.current.trackPageView(page); }, []); const trackAdClick = useCallback((adId: number, position?: number) => { telemetryRef.current.trackAdClick(adId, position); }, []); const trackCustomEvent = useCallback( (eventType: string, adId?: number, metadata?: Record) => { telemetryRef.current.trackCustomEvent(eventType, adId, metadata); }, [], ); return { trackSearch, trackFilter, trackFavorite, trackPurchase, trackInquiry, trackPageView, trackAdClick, trackCustomEvent, telemetry: telemetryRef.current, }; }