// Simulated data functions - Replace these with API calls when ready
// Example: export async function getPricingHistory(partId: string) { ... }

export interface PriceHistoryPoint {
  date: string; // ISO date string
  price: number;
}

export interface RetailerOffer {
  id: string;
  retailerName: string;
  price: number;
  originalPrice?: number;
  inStock: boolean;
  affiliateUrl: string;
  lastUpdated: string; // ISO date string
}

/**
 * Get pricing history for a part
 * TODO: Replace with API call: GET /api/parts/{partId}/pricing-history
 */
export function getPricingHistory(
  partId: string,
  basePrice: number,
): PriceHistoryPoint[] {
  // Generate 30 days of price history with some variation
  const days = 30;
  const history: PriceHistoryPoint[] = [];
  const today = new Date();

  for (let i = days - 1; i >= 0; i--) {
    const date = new Date(today);
    date.setDate(date.getDate() - i);

    // Simulate price fluctuations (±15% variation)
    const variation = (Math.random() - 0.5) * 0.3; // -15% to +15%
    const price = basePrice * (1 + variation);

    history.push({
      date: date.toISOString().split("T")[0],
      price: Math.round(price * 100) / 100,
    });
  }

  return history;
}

/**
 * Get retailer offers for a part
 * TODO: Replace with API call: GET /api/parts/{partId}/retailers
 */
export function getRetailerOffers(
  partId: string,
  basePrice: number,
  baseAffiliateUrl: string,
): RetailerOffer[] {
  const retailers = [
    "Primary Arms",
    "Brownells",
    "Optics Planet",
    "MidwayUSA",
    "Palmetto State Armory",
  ];

  return retailers.map((retailer, index) => {
    // Simulate price variations between retailers
    const priceVariation = (Math.random() - 0.4) * 0.2; // -8% to +12%
    const price = basePrice * (1 + priceVariation);
    const hasSale = Math.random() > 0.6; // 40% chance of sale
    const originalPrice = hasSale ? price * 1.15 : undefined;
    const inStock = Math.random() > 0.2; // 80% chance in stock

    return {
      id: `retailer-${index}`,
      retailerName: retailer,
      price: Math.round(price * 100) / 100,
      originalPrice: originalPrice
        ? Math.round(originalPrice * 100) / 100
        : undefined,
      inStock,
      affiliateUrl: baseAffiliateUrl.replace("example.com", `${retailer.toLowerCase().replace(/\s+/g, "")}.com`),
      lastUpdated: new Date().toISOString(),
    };
  }).sort((a, b) => a.price - b.price); // Sort by price ascending
}

