type EventTrackerConfig = {
  apiKey: string;
  endpoint: string;
  autoCapture?: boolean;
};

class EventTracker {
  private static config: EventTrackerConfig;

  static init(config: EventTrackerConfig) {
    this.config = config;
    if (config.autoCapture !== false) {
      this.setupAutoCapture();
    }
    this.capturePageView();
  }

  private static setupAutoCapture() {
    document.addEventListener('click', this.handleClick, true);
  }

  private static handleClick(event: MouseEvent) {
    const target = event.target as HTMLElement;
    if (!target) return;
    let eventType = '';
    if (target.tagName === 'A') {
      eventType = 'link_click';
    } else if (target.tagName === 'BUTTON') {
      eventType = 'button_click';
    } else {
      eventType = 'element_click';
    }
    EventTracker.sendEvent({
      type: eventType,
      tag: target.tagName,
      text: (target as HTMLElement).innerText || '',
      href: (target as HTMLAnchorElement).href || '',
      timestamp: Date.now(),
    });
  }

  private static capturePageView() {
    this.sendEvent({
      type: 'page_view',
      url: window.location.href,
      title: document.title,
      timestamp: Date.now(),
    });
  }

  static sendEvent(data: Record<string, any>) {
    if (!this.config || !this.config.endpoint) return;
    fetch(this.config.endpoint, {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
        'Authorization': `Bearer ${this.config.apiKey}`,
      },
      body: JSON.stringify(data),
    }).catch(() => {});
  }
}

export default EventTracker; 