import { BaseApiClient } from '../base/BaseApiClient';
import { RecordPageViewOutputDTO } from '../../types/generated/RecordPageViewOutputDTO';
import { RecordEngagementOutputDTO } from '../../types/generated/RecordEngagementOutputDTO';
import { GetDashboardDataOutputDTO } from '../../types/generated/GetDashboardDataOutputDTO';
import { GetAnalyticsMetricsOutputDTO } from '../../types/generated/GetAnalyticsMetricsOutputDTO';
import { RecordPageViewInputDTO } from '../../types/generated/RecordPageViewInputDTO';
import { RecordEngagementInputDTO } from '../../types/generated/RecordEngagementInputDTO';

/**
 * Analytics API Client
 *
 * Handles all analytics-related API operations.
 */
export class AnalyticsApiClient extends BaseApiClient {
  /** Record a page view */
  recordPageView(input: RecordPageViewInputDTO): Promise<RecordPageViewOutputDTO> {
    return this.post<RecordPageViewOutputDTO>('/analytics/page-view', input);
  }

  /** Record an engagement event */
  recordEngagement(input: RecordEngagementInputDTO): Promise<RecordEngagementOutputDTO> {
    return this.post<RecordEngagementOutputDTO>('/analytics/engagement', input);
  }

  /** Get analytics dashboard data */
  getDashboardData(): Promise<GetDashboardDataOutputDTO> {
    return this.get<GetDashboardDataOutputDTO>('/analytics/dashboard');
  }

  /** Get analytics metrics */
  getAnalyticsMetrics(): Promise<GetAnalyticsMetricsOutputDTO> {
    return this.get<GetAnalyticsMetricsOutputDTO>('/analytics/metrics');
  }
}