/* global React */
/* Mock data + helpers used across pages */

const CATEGORIES = [
  'Appliances',
  'Arts, Crafts & Sewing',
  'Automotive',
  'Baby Products',
  'Beauty & Personal Care',
  'Books',
  'Cell Phones & Accessories',
  'Clothing, Shoes & Jewelry',
  'Electronics',
  'Grocery & Gourmet Food',
  'Health & Household',
  'Home & Kitchen',
  'Industrial & Scientific',
  'Kindle Store',
  'Movies & TV',
  'Musical Instruments',
  'Office Products',
  'Patio, Lawn & Garden',
  'Pet Supplies',
  'Software',
  'Sports & Outdoors',
  'Tools & Home Improvement',
  'Toys & Games',
  'Video Games',
];
const SOURCES = ['Amazon Direct','Walmart','Target','Costco','Home Depot','Best Buy','Kohl\'s','Fanatics','National Tool Warehouse'];
const TAGS = ['high‑roi','seasonal','trending','low‑competition','restocked','review‑rich','low‑variation','viral'];

function rng(seed) { return () => { seed = (seed * 9301 + 49297) % 233280; return seed / 233280; }; }
function pick(r, arr) { return arr[Math.floor(r() * arr.length)]; }
function spark(r, n = 14, base = 50, vol = 30) {
  const out = []; let v = base;
  for (let i = 0; i < n; i++) { v += (r() - 0.45) * vol; out.push(Math.max(5, v)); }
  return out;
}

const PRODUCT_NAMES = [
  'Robinair 13204 Premium High Vacuum Pump Oil — 1 Gallon',
  '2026 Topps Chrome Baseball Hobby Box',
  'Levoit Core 300 True HEPA Air Purifier',
  'Stanley Quencher 40 oz Tumbler — Charcoal',
  'OXO Good Grips 11" Rolling Pin',
  'Anker 737 Power Bank 24,000 mAh',
  'Carhartt Acrylic Watch Hat — Heather Grey',
  'Yeti Rambler 14oz Mug with MagSlider Lid',
  'Hydro Flask Wide Mouth 32oz — Indigo',
  'Bose QuietComfort 45 Headphones',
  'Logitech MX Master 3S — Graphite',
  'Crocs Classic Lined Clog — Black',
  'Ninja CREAMi Deluxe Ice Cream Maker',
  'Owala FreeSip Stainless 24oz',
  'Theragun PRO 5th Gen Massager',
  'Ember Travel Mug 2 — 12oz Black',
  'Apple AirTag 4 Pack',
  'Kindle Paperwhite Signature Edition',
  'Dewalt 20V MAX Cordless Drill Combo',
  'Sony WH‑1000XM5 Wireless Headphones',
  'Lego Architecture Statue of Liberty 21042',
  'Patagonia Better Sweater Fleece — Navy',
  'Garmin Forerunner 265 GPS Watch',
  'Vitamix A3500 Ascent Series Blender',
  'Le Creuset 5.5 Qt Round Dutch Oven',
];

const BRANDS = ['Robinair','Topps','Levoit','Stanley','OXO','Anker','Carhartt','Yeti','Hydro Flask','Bose','Logitech','Crocs','Ninja','Owala','Theragun','Ember','Apple','Amazon','Dewalt','Sony','Lego','Patagonia','Garmin','Vitamix','Le Creuset'];

function makeProducts(n = 50, seed = 42) {
  const r = rng(seed);
  const out = [];
  for (let i = 0; i < n; i++) {
    const cat = pick(r, CATEGORIES);
    const src = pick(r, SOURCES);
    const brand = BRANDS[i % BRANDS.length];
    const cost = +(8 + r() * 60).toFixed(2);
    const price = +(cost * (1.6 + r() * 1.6)).toFixed(2);
    const profit = +(price * (0.10 + r() * 0.45) - cost * 0.05).toFixed(2);
    const roi = Math.round((profit / cost) * 100);
    const monthlySales = Math.round(120 + r() * 9000);
    const revenue30d = Math.round(monthlySales * price * (0.6 + r() * 0.6));
    const bsr = Math.round(800 + r() * 280000);
    const reviews = Math.round(40 + r() * 18000);
    const rating = +(3.2 + r() * 1.7).toFixed(1);
    const variations = Math.round(1 + r() * 18);
    const videos = Math.round(r() * 24);
    const cc = Math.round(r() * 38); // creator connections %
    const onSite = +(2 + r() * 8).toFixed(1); // on-site %
    const onSiteCommission = +(price * (onSite / 100)).toFixed(2);
    const ccCommission = +(price * (cc / 100)).toFixed(2);
    const listingAge = Math.round(40 + r() * 1900);
    const startMonthNum = [3, 4, 5, 6][Math.floor(r() * 4)];
    const endMonthNum = [7, 8, 9, 10][Math.floor(r() * 4)];
    const startDay = 1 + Math.floor(r() * 27);
    const endDay = 1 + Math.floor(r() * 27);
    const pad = n => String(n).padStart(2, '0');
    const campaignStart = `2026-${pad(startMonthNum)}-${pad(startDay)}`;
    const campaignEnd   = `2026-${pad(endMonthNum)}-${pad(endDay)}`;
    const budget = Math.round(500 + r() * 9500);
    const remainingBudget = Math.round(budget * (0.1 + r() * 0.85));
    const inLeads = r() > 0.78;
    out.push({
      id: `p${i}`,
      name: PRODUCT_NAMES[i % PRODUCT_NAMES.length],
      asin: 'B0' + Math.floor(r() * 1e8).toString(36).toUpperCase().padStart(8, '0').slice(0, 8),
      brand,
      category: cat,
      source: src,
      cost, price, profit, roi,
      monthlySales, revenue30d, bsr, reviews, rating, variations, videos, cc,
      onSite, onSiteCommission, ccCommission,
      listingAge,
      campaignStart, campaignEnd, budget, remainingBudget,
      tags: [pick(r, TAGS), pick(r, TAGS)].filter((v, i, a) => a.indexOf(v) === i),
      trend: spark(r, 14, 40 + r() * 60, 18),
      inLeads,
      addedDate: 'Apr ' + (12 + (i % 14)) + ', 2026',
      list: pick(r, ['inbox','high-roi','trending','review','retail-arb']),
    });
  }
  return out;
}

const ALL_PRODUCTS = makeProducts(60);

const fmtUSD = (n) => '$' + (n).toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 });
const fmtInt = (n) => n.toLocaleString('en-US');
const fmtBSR = (n) => '#' + fmtInt(n);

window.AIP_DATA = { ALL_PRODUCTS, CATEGORIES, SOURCES, TAGS, fmtUSD, fmtInt, fmtBSR };
