/**
 * Type definition for analytics event properties.
 *
 * @example
 * ```typescript
 * const properties: AnalyticsEventProperties = {
 *   product_id: '123',
 *   product_name: 'Cable',
 *   price: 99.99,
 *   quantity: 1,
 *   in_stock: true,
 * };
 * ```
 */
export type AnalyticsEventProperties = Record<
  string,
  string | number | boolean | null | undefined
>;

/**
 * Interface for analytics service implementations.
 *
 * This interface defines the contract for all analytics services,
 * allowing for different implementations (Umami, Google Analytics, etc.)
 * while maintaining a consistent API.
 *
 * @example
 * ```typescript
 * // Using the service directly
 * const service = new UmamiAnalyticsService({ enabled: true });
 * service.track('button_click', { button_id: 'cta' });
 * service.trackPageview('/products/123');
 * ```
 *
 * @example
 * ```typescript
 * // Using the useAnalytics hook (recommended)
 * const { trackEvent, trackPageview } = useAnalytics();
 * trackEvent('button_click', { button_id: 'cta' });
 * trackPageview('/products/123');
 * ```
 */
export interface AnalyticsService {
  /**
   * Track a custom event with optional properties.
   *
   * @param eventName - The name of the event to track
   * @param props - Optional event properties (metadata)
   *
   * @example
   * ```typescript
   * track('product_add_to_cart', {
   *   product_id: '123',
   *   product_name: 'Cable',
   *   price: 99.99,
   * });
   * ```
   */
  track(eventName: string, props?: AnalyticsEventProperties): void;

  /**
   * Track a pageview.
   *
   * @param url - The URL to track (defaults to current location)
   *
   * @example
   * ```typescript
   * // Track current page
   * trackPageview();
   *
   * // Track custom URL
   * trackPageview('/products/123?category=cables');
   * ```
   */
  trackPageview(url?: string): void;
}

