import { randomFloat, uuid } from '../utils.js';
import type { EventData } from './events.js';

export interface RevenueConfig {
  eventName: string;
  minAmount: number;
  maxAmount: number;
  currency: string;
  weight: number;
}

export interface RevenueData {
  id: string;
  websiteId: string;
  sessionId: string;
  eventId: string;
  eventName: string;
  currency: string;
  revenue: number;
  createdAt: Date;
}

export function generateRevenue(event: EventData, config: RevenueConfig): RevenueData | null {
  if (event.eventName !== config.eventName) {
    return null;
  }

  if (Math.random() > config.weight) {
    return null;
  }

  const revenue = randomFloat(config.minAmount, config.maxAmount);

  return {
    id: uuid(),
    websiteId: event.websiteId,
    sessionId: event.sessionId,
    eventId: event.id,
    eventName: event.eventName!,
    currency: config.currency,
    revenue: Math.round(revenue * 100) / 100, // Round to 2 decimal places
    createdAt: event.createdAt,
  };
}

export function generateRevenueForEvents(
  events: EventData[],
  configs: RevenueConfig[],
): RevenueData[] {
  const revenueEntries: RevenueData[] = [];

  for (const event of events) {
    if (!event.eventName) continue;

    for (const config of configs) {
      const revenue = generateRevenue(event, config);
      if (revenue) {
        revenueEntries.push(revenue);
        break; // Only one revenue per event
      }
    }
  }

  return revenueEntries;
}
