type AnalyticsIdentifyEvent = {
  userId: string;
  traits: {
    email: string;
    name: string;
  };
};

type AnalyticsTrackEvent =
  | {
      name: 'Play Shared Track';
      properties: {
        trackId: string;
        trackName: string;
      };
    }
  | {
      name: 'Seek Shared Track';
      properties: {
        trackId: string;
        trackName: string;
        timeSeconds: number;
        progress: number;
      };
    }
  | {
      name: 'Landing Button Clicked';
      properties: {
        text: string;
        location: string;
      };
    }
  | {
      name: 'Landing Link Clicked';
      properties: {
        text: string;
        location: string;
      };
    }
  | {
      name: 'Experiment Branch Assigned';
      properties: {
        experiment: string;
        branch: string;
      };
    };

export const identifyUser = (identifyEvent: AnalyticsIdentifyEvent) => {
  if (process.env.NODE_ENV === 'development') {
    console.log('Would identify:', identifyEvent);
    return;
  }
  const analytics = (window as any).analytics;
  if (analytics) {
    analytics.identify(identifyEvent.userId, {
      ...identifyEvent.traits,
    });
  } else {
    console.error('event tracking failed - analytics not set');
  }
};

const trackAnalyticsEvent = (event: AnalyticsTrackEvent) => {
  setTimeout(() => {
    if (process.env.NODE_ENV === 'development') {
      console.log('Would track:', event);
      return;
    }
    const analytics = (window as any).analytics;
    if (analytics) {
      analytics.track(event.name, {
        ...event.properties,
      });
    } else {
      console.error('event tracking failed - analytics not set');
    }
  });
};

export default trackAnalyticsEvent;
