/** * Wrapper pour PostHog qui gère automatiquement les environnements de production et développement * - En production: utilise PostHog normalement * - En développement: log les événements dans la console */ class Analytics { constructor() { this.isPosthogAvailable = typeof posthog !== 'undefined'; this.debug = !this.isPosthogAvailable; if (this.debug) { console.info('Analytics: PostHog n\'est pas disponible, mode debug activé'); } } /** * Capture un événement * @param {string} eventName - Nom de l'événement * @param {Object} properties - Propriétés additionnelles (optionnel) */ capture(eventName, properties = {}) { if (this.isPosthogAvailable) { // En production, utiliser PostHog normalement posthog.capture(eventName, properties); } else { // En développement, logger dans la console console.info(`📊 Analytics Event: ${eventName}`, properties); } } /** * Identifie un utilisateur * @param {string} userId - ID de l'utilisateur * @param {Object} traits - Propriétés de l'utilisateur */ identify(userId, traits = {}) { if (this.isPosthogAvailable) { posthog.identify(userId, traits); } else { console.info(`📊 Analytics Identify: ${userId}`, traits); } } /** * Récupère l'ID distinct de l'utilisateur * @returns {string} ID distinct */ getDistinctId() { if (this.isPosthogAvailable) { return posthog.get_distinct_id(); } else { return 'dev-user-id'; } } /** * Vérifie si un feature flag est activé * @param {string} flagName - Nom du feature flag * @returns {boolean} True si le flag est activé */ isFeatureEnabled(flagName) { if (this.isPosthogAvailable) { return posthog.isFeatureEnabled(flagName); } else { console.info(`📊 Analytics Feature Flag Check: ${flagName}`); return true; // En dev, on active toutes les features par défaut } } /** * Récupère la valeur d'un feature flag * @param {string} flagName - Nom du feature flag * @returns {*} Valeur du feature flag */ getFeatureFlag(flagName) { if (this.isPosthogAvailable) { return posthog.getFeatureFlag(flagName); } else { console.info(`📊 Analytics Get Feature Flag: ${flagName}`); return null; } } /** * Recharge les feature flags */ reloadFeatureFlags() { if (this.isPosthogAvailable) { posthog.reloadFeatureFlags(); } else { console.info('📊 Analytics Reload Feature Flags'); } } /** * Enregistre une exception * @param {Error} error - L'erreur à enregistrer */ captureException(error) { if (this.isPosthogAvailable) { posthog.captureException(error); } else { console.error('📊 Analytics Exception:', error); } } } // Créer une instance globale window.analytics = new Analytics();