import api from './api';

// Типы данных
export interface AnalyticsLog {
  id: number;
  event_type: string;
  user_id?: number;
  session_id: string;
  data: Record<string, any>;
  created_at: string;
}

export interface AnalyticsLogCreate {
  event_type: string;
  session_id: string;
  data: Record<string, any>;
}

export interface AnalyticsReport {
  report_type: string;
  data: Record<string, any>;
  start_date?: string;
  end_date?: string;
}

// Сервис для работы с аналитикой
export const analyticsService = {
  // Логирование события аналитики
  logEvent: async (event: AnalyticsLogCreate): Promise<AnalyticsLog> => {
    const response = await api.post('/analytics/log', event);
    return response.data;
  },

  // Получить логи аналитики (только для админов)
  getLogs: async (params?: {
    event_type?: string;
    start_date?: string;
    end_date?: string;
    skip?: number;
    limit?: number;
  }): Promise<{ logs: AnalyticsLog[], total: number }> => {
    const response = await api.get('/analytics/logs', { params });
    return response.data;
  },

  // Получить отчет по аналитике (только для админов)
  getReport: async (reportType: string, params?: {
    start_date?: string;
    end_date?: string;
  }): Promise<AnalyticsReport> => {
    const response = await api.get(`/analytics/report`, { 
      params: { 
        report_type: reportType,
        ...params
      } 
    });
    return response.data;
  },

  // Инициализация отслеживания сессии
  initTracking: (): string => {
    // Генерируем ID сессии, если его нет
    let sessionId = localStorage.getItem('session_id');
    if (!sessionId) {
      sessionId = `session_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`;
      localStorage.setItem('session_id', sessionId);
    }
    return sessionId;
  },

  // Отслеживание просмотра страницы
  trackPageView: async (path: string): Promise<void> => {
    const sessionId = analyticsService.initTracking();
    await analyticsService.logEvent({
      event_type: 'page_view',
      session_id: sessionId,
      data: { path }
    });
  },

  // Отслеживание просмотра товара
  trackProductView: async (productId: number, productName: string): Promise<void> => {
    const sessionId = analyticsService.initTracking();
    await analyticsService.logEvent({
      event_type: 'product_view',
      session_id: sessionId,
      data: { product_id: productId, product_name: productName }
    });
  },

  // Отслеживание добавления товара в корзину
  trackAddToCart: async (productId: number, productName: string, quantity: number): Promise<void> => {
    const sessionId = analyticsService.initTracking();
    await analyticsService.logEvent({
      event_type: 'add_to_cart',
      session_id: sessionId,
      data: { product_id: productId, product_name: productName, quantity }
    });
  }
}; 