/**
 * Error Tracking Utility
 * 
 * Provides error tracking integration (ready for Sentry or similar services).
 * Currently provides a no-op implementation that can be replaced with actual
 * error tracking service integration.
 * 
 * To integrate Sentry:
 * 1. Install: npm install @sentry/react
 * 2. Uncomment and configure the Sentry initialization
 * 3. Update the captureException and captureMessage calls
 */

// Uncomment when ready to use Sentry:
// import * as Sentry from '@sentry/react';

interface ErrorContext {
  [key: string]: unknown;
}

class ErrorTracker {
  private initialized = false;

  /**
   * Initialize error tracking service
   */
  init(dsn?: string, environment?: string): void {
    if (this.initialized) {
      return;
    }

    // Uncomment when ready to use Sentry:
    /*
    if (!dsn) {
      console.warn('Error tracking DSN not provided, error tracking disabled');
      return;
    }

    Sentry.init({
      dsn,
      environment: environment || import.meta.env.MODE,
      integrations: [
        new Sentry.BrowserTracing(),
        new Sentry.Replay(),
      ],
      tracesSampleRate: 1.0, // Adjust based on traffic
      replaysSessionSampleRate: 0.1,
      replaysOnErrorSampleRate: 1.0,
    });

    this.initialized = true;
    */
  }

  /**
   * Capture an exception
   */
  captureException(error: Error, context?: ErrorContext): void {
    // Uncomment when ready to use Sentry:
    /*
    if (this.initialized) {
      Sentry.captureException(error, {
        contexts: {
          custom: context || {},
        },
      });
    }
    */

    // Fallback logging
    if (import.meta.env.DEV) {
      console.error('Error captured:', error, context);
    }
  }

  /**
   * Capture a message
   */
  captureMessage(message: string, level: 'info' | 'warning' | 'error' = 'error', context?: ErrorContext): void {
    // Uncomment when ready to use Sentry:
    /*
    if (this.initialized) {
      Sentry.captureMessage(message, {
        level: level as Sentry.SeverityLevel,
        contexts: {
          custom: context || {},
        },
      });
    }
    */

    // Fallback logging
    if (import.meta.env.DEV) {
      const logMethod = level === 'error' ? console.error : level === 'warning' ? console.warn : console.info;
      logMethod('Message captured:', message, context);
    }
  }

  /**
   * Set user context for error tracking
   */
  setUser(user: { id: string; email?: string; username?: string } | null): void {
    // Uncomment when ready to use Sentry:
    /*
    if (this.initialized) {
      Sentry.setUser(user);
    }
    */
  }

  /**
   * Add breadcrumb for debugging
   */
  addBreadcrumb(message: string, category?: string, level?: 'info' | 'warning' | 'error'): void {
    // Uncomment when ready to use Sentry:
    /*
    if (this.initialized) {
      Sentry.addBreadcrumb({
        message,
        category: category || 'custom',
        level: level || 'info',
      });
    }
    */
  }
}

export const errorTracker = new ErrorTracker();
