const categories = [ 'Electronics', 'Clothing', 'Home & Garden', 'Sports', 'Books', 'Toys', 'Food', 'Health', ]; const statuses = ['In Stock', 'Low Stock', 'Out of Stock', 'Discontinued']; const activityTypes = [ 'order_placed', 'order_shipped', 'order_delivered', 'refund_requested', 'review_posted', 'product_added', 'stock_alert', 'payment_received', ]; const userNames = [ 'Alice Johnson', 'Bob Williams', 'Carol Davis', 'Dan Miller', 'Eve Wilson', 'Frank Moore', 'Grace Taylor', 'Henry Anderson', 'Iris Thomas', 'Jack Jackson', ]; const reviewTexts = [ 'Great product, exactly what I needed. The quality exceeded my expectations and shipping was fast.', 'Decent value for the price. Some minor issues with packaging but the product itself works well.', 'Not what I expected based on the description. Returning this item for a refund.', 'Outstanding quality and craftsmanship. Would highly recommend to anyone looking for this type of item.', 'Average product, nothing special. Does what it says but nothing more than that.', ]; export function generateProducts(count) { const products = []; for (let i = 0; i < count; i++) { products.push({ id: i, name: 'Product ' + i, sku: 'SKU-' + String(i).padStart(6, '0'), price: (((i * 17 + 3) % 9999) / 100).toFixed(2), category: categories[i % categories.length], status: statuses[i % statuses.length], stock: (i * 7 + 13) % 500, rating: (((i * 3 + 1) % 50) / 10).toFixed(1), reviewCount: (i * 13 + 5) % 200, description: 'This is a detailed description for product ' + i + '. It includes specifications, features, and other relevant information that a customer might need.', tags: [ categories[(i + 1) % categories.length].toLowerCase(), i % 2 === 0 ? 'featured' : 'new', i % 3 === 0 ? 'sale' : 'regular', ], dimensions: { weight: ((i * 3 + 1) % 100) / 10, width: ((i * 7 + 2) % 50) + 5, height: ((i * 11 + 3) % 40) + 5, depth: ((i * 13 + 4) % 30) + 2, unit: 'cm', }, supplier: { name: 'Supplier ' + (i % 20), leadTime: (i % 14) + 1 + ' days', minOrder: ((i * 3) % 50) + 10, contact: 'supplier' + (i % 20) + '@example.com', address: { street: ((100 + i * 7) % 9999) + ' Industrial Blvd', city: ['Portland', 'Austin', 'Denver', 'Seattle', 'Boston'][i % 5], state: ['OR', 'TX', 'CO', 'WA', 'MA'][i % 5], zip: String(10000 + ((i * 37) % 89999)), }, }, specifications: { material: ['Aluminum', 'Plastic', 'Steel', 'Wood', 'Carbon Fiber'][ i % 5 ], color: ['Black', 'White', 'Silver', 'Blue', 'Red', 'Green'][i % 6], warranty: (i % 3) + 1 + ' years', certifications: [ i % 2 === 0 ? 'CE' : 'FCC', i % 3 === 0 ? 'RoHS' : 'UL', 'ISO 9001', ], }, reviews: [ { author: userNames[(i * 3) % userNames.length], rating: ((i * 7 + 3) % 5) + 1, date: '2026-0' + ((i % 3) + 1) + '-' + String((i % 28) + 1).padStart(2, '0'), text: reviewTexts[i % reviewTexts.length], helpful: (i * 11 + 2) % 50, }, { author: userNames[(i * 3 + 1) % userNames.length], rating: ((i * 11 + 1) % 5) + 1, date: '2026-0' + ((i % 3) + 1) + '-' + String(((i + 5) % 28) + 1).padStart(2, '0'), text: reviewTexts[(i + 2) % reviewTexts.length], helpful: (i * 7 + 5) % 30, }, { author: userNames[(i * 3 + 2) % userNames.length], rating: ((i * 13 + 2) % 5) + 1, date: '2026-0' + ((i % 3) + 1) + '-' + String(((i + 10) % 28) + 1).padStart(2, '0'), text: reviewTexts[(i + 4) % reviewTexts.length], helpful: (i * 3 + 1) % 20, }, ], }); } return products; } export function generateActivities(count) { const activities = []; for (let i = 0; i < count; i++) { activities.push({ id: i, type: activityTypes[i % activityTypes.length], user: userNames[i % userNames.length], timestamp: '2026-03-' + String((i % 28) + 1).padStart(2, '0') + 'T' + String((i * 7) % 24).padStart(2, '0') + ':' + String((i * 13) % 60).padStart(2, '0') + ':00Z', details: { orderId: '#' + String(10000 + i), amount: '$' + ((i * 23 + 7) % 999).toFixed(2), items: ((i * 3 + 1) % 5) + 1, shippingMethod: ['Standard', 'Express', 'Overnight', 'Economy'][i % 4], paymentMethod: ['Credit Card', 'PayPal', 'Apple Pay', 'Wire Transfer'][ i % 4 ], }, message: userNames[i % userNames.length] + ' ' + activityTypes[i % activityTypes.length].replace(/_/g, ' ') + ' for order #' + (10000 + i), }); } return activities; } export function generateStats() { return { totalRevenue: '$1,284,320.50', totalOrders: 8432, totalCustomers: 3841, conversionRate: '3.2%', avgOrderValue: '$152.30', returnsRate: '2.1%', cards: [ { title: 'Total Revenue', value: '$1,284,320', change: '+12.5%', trend: 'up', sparkline: [65, 59, 80, 81, 56, 55, 72, 84, 91, 88, 95, 102], }, { title: 'Orders', value: '8,432', change: '+8.2%', trend: 'up', sparkline: [28, 48, 40, 19, 86, 27, 90, 65, 72, 81, 56, 88], }, { title: 'Customers', value: '3,841', change: '+4.1%', trend: 'up', sparkline: [12, 19, 25, 32, 28, 35, 42, 38, 45, 51, 48, 55], }, { title: 'Conversion Rate', value: '3.2%', change: '-0.3%', trend: 'down', sparkline: [3.8, 3.5, 3.2, 3.6, 3.1, 3.4, 3.0, 3.3, 3.5, 3.2, 3.1, 3.2], }, ], revenueByMonth: [ {month: 'Jan 25', value: 72000, orders: 480, returns: 24}, {month: 'Feb 25', value: 78000, orders: 520, returns: 31}, {month: 'Mar 25', value: 85000, orders: 567, returns: 28}, {month: 'Apr 25', value: 92000, orders: 613, returns: 35}, {month: 'May 25', value: 88000, orders: 587, returns: 29}, {month: 'Jun 25', value: 105000, orders: 700, returns: 42}, {month: 'Jul 25', value: 112000, orders: 747, returns: 38}, {month: 'Aug 25', value: 98000, orders: 653, returns: 33}, {month: 'Sep 25', value: 115000, orders: 767, returns: 41}, {month: 'Oct 25', value: 108000, orders: 720, returns: 36}, {month: 'Nov 25', value: 120000, orders: 800, returns: 44}, {month: 'Dec 25', value: 118320, orders: 789, returns: 39}, {month: 'Jan 26', value: 85000, orders: 567, returns: 28}, {month: 'Feb 26', value: 92000, orders: 613, returns: 32}, {month: 'Mar 26', value: 95000, orders: 633, returns: 30}, {month: 'Apr 26', value: 110000, orders: 733, returns: 37}, {month: 'May 26', value: 118000, orders: 787, returns: 40}, {month: 'Jun 26', value: 105000, orders: 700, returns: 35}, {month: 'Jul 26', value: 122000, orders: 813, returns: 43}, {month: 'Aug 26', value: 115000, orders: 767, returns: 38}, {month: 'Sep 26', value: 128000, orders: 853, returns: 45}, {month: 'Oct 26', value: 125000, orders: 833, returns: 42}, {month: 'Nov 26', value: 135000, orders: 900, returns: 47}, {month: 'Dec 26', value: 130000, orders: 867, returns: 44}, ], topCategories: [ { name: 'Electronics', revenue: 420000, orders: 2800, avgPrice: 150, growth: '+15.2%', }, { name: 'Clothing', revenue: 310000, orders: 2100, avgPrice: 147.6, growth: '+8.7%', }, { name: 'Home & Garden', revenue: 225000, orders: 1500, avgPrice: 150, growth: '+12.1%', }, { name: 'Sports', revenue: 180000, orders: 1200, avgPrice: 150, growth: '+5.3%', }, { name: 'Books', revenue: 149320, orders: 832, avgPrice: 179.5, growth: '+2.1%', }, { name: 'Toys', revenue: 95000, orders: 680, avgPrice: 139.7, growth: '+18.4%', }, { name: 'Food', revenue: 82000, orders: 1640, avgPrice: 50, growth: '+6.8%', }, { name: 'Health', revenue: 73000, orders: 520, avgPrice: 140.4, growth: '+22.1%', }, ], }; }