/**
 * Сервис для работы с аналитикой Graspil
 */

/**
 * Отслеживает пользовательское событие
 * @param eventName - Название события
 * @param category - Категория события (опционально)
 * @param valueNum - Числовое значение (опционально)
 * @param unit - Код валюты, максимальная длина 3 символа (опционально, обязательно если указан valueNum)
 */
export const trackEvent = (
  eventName: string, 
  category?: string, 
  valueNum?: number, 
  unit?: string
): void => {
  if (typeof window !== 'undefined' && window.graspil) {
    const eventData: {
      event: string;
      category?: string;
      value_num?: number;
      unit?: string;
    } = {
      event: eventName,
    };

    if (category) {
      eventData.category = category;
    }

    if (valueNum !== undefined) {
      eventData.value_num = valueNum;
      
      // Если есть числовое значение, но нет единицы измерения, используем 'unit' по умолчанию
      if (unit) {
        eventData.unit = unit;
      }
    }

    window.graspil.push(eventData);
  }
};

/**
 * Отслеживает просмотр экрана
 * @param screenName - Название экрана
 */
export const trackScreenView = (screenName: string): void => {
  trackEvent(`Просмотр экрана: ${screenName}`, 'navigation');
};

/**
 * Отслеживает клик по кнопке
 * @param buttonName - Название кнопки
 */
export const trackButtonClick = (buttonName: string): void => {
  trackEvent(`Клик: ${buttonName}`, 'interaction');
};

/**
 * Отслеживает генерацию стикера
 * @param prompt - Промпт для генерации
 */
export const trackStickerGeneration = (prompt: string): void => {
  if (typeof window !== 'undefined' && window.graspil) {
    window.graspil.push({
      event: prompt, // Сам промпт как название события
      category: 'generation' // Категория для фильтрации
    });
  }
};

/**
 * Отслеживает создание стикер-пака
 * @param packName - Название пака
 */
export const trackStickerPackCreation = (packName: string): void => {
  trackEvent('Создание стикер-пака', 'creation', 1);
};

/**
 * Отслеживает покупку токенов
 * @param amount - Количество токенов
 * @param price - Цена в валюте
 * @param currency - Код валюты (максимум 3 символа)
 */
export const trackTokenPurchase = (amount: number, price: number, currency: string): void => {
  trackEvent('Покупка токенов', 'purchase', price, currency);
};

/**
 * Отслеживает неудавшуюся генерацию стикера из-за непрошедшего фильтр промпта
 * @param originalPrompt - Оригинальный промпт пользователя
 */
export const trackRejectedPrompt = (originalPrompt: string): void => {
  if (typeof window !== 'undefined' && window.graspil) {
    window.graspil.push({
      event: `Не принятый промпт: ${originalPrompt}`, // Оригинальный промпт как название события
      category: 'rejected_generation' // Категория для фильтрации
    });
  }
};
