// data.jsx — Wie Dam mock data

const CATEGORIES = [
  { slug: 'shokuhin', kanji: '食', nameJP: '食品', nameID: 'Makanan & Minuman', color: 'linear-gradient(135deg, #FF6B9D, #FF3B7A)' },
  { slug: 'irui',     kanji: '衣', nameJP: '衣類', nameID: 'Fashion & Pakaian',   color: 'linear-gradient(135deg, #6EC1FF, #00A3FF)' },
  { slug: 'biyou',    kanji: '美', nameJP: '美容', nameID: 'Beauty & Skincare',   color: 'linear-gradient(135deg, #FFB3D9, #FF7AB8)' },
  { slug: 'denshi',   kanji: '電', nameJP: '電子', nameID: 'Elektronik & Gadget', color: 'linear-gradient(135deg, #2A2A36, #5C5C6B)' },
  { slug: 'katei',    kanji: '家', nameJP: '家庭', nameID: 'Home & Living',       color: 'linear-gradient(135deg, #FFD93D, #FFA500)' },
  { slug: 'shumi',    kanji: '趣', nameJP: '趣味', nameID: 'Anime & Hobby',       color: 'linear-gradient(135deg, #B388FF, #6A3DFF)' },
  { slug: 'bungu',    kanji: '文', nameJP: '文具', nameID: 'Stationery & Books',  color: 'linear-gradient(135deg, #00E0FF, #00B8A8)' },
];

function fmtIDR(n) {
  return 'Rp ' + n.toLocaleString('id-ID');
}
function fmtJPY(n) {
  return '¥' + n.toLocaleString('ja-JP');
}
function fmtPrice(jpy, idr, mode) {
  if (mode === 'jpy')  return fmtJPY(jpy);
  if (mode === 'idr')  return fmtIDR(idr);
  return fmtIDR(idr); // both → main returns IDR; caller handles alt
}

const BADGES = {
  'new':     { jp: '新着',  text: 'BARU',     cls: 'cyan' },
  'sale':    { jp: 'セール', text: 'SALE',    cls: 'pink' },
  'limited': { jp: '限定',  text: 'LIMITED', cls: 'yellow' },
  'hot':     { jp: '人気',  text: 'HOT',     cls: 'pink' },
  'preorder':{ jp: '予約',  text: 'PRE-ORDER', cls: 'cyan' },
};

// 42 products (6 per category)
const PRODUCTS = [
  // 食品
  { id: 'p001', cat: 'shokuhin', nameID: 'Matcha Uji Premium 100g', nameJP: '宇治抹茶 プレミアム 100g',
    brand: 'Ippodo', origin: 'Kyoto', priceJPY: 2800, priceIDR: 298000, oldIDR: 350000,
    badges: ['hot'], rating: 4.9, sold: 1240, stock: 38,
    variants: [{label:'100g'}, {label:'50g'}], glyph: '茶' },
  { id: 'p002', cat: 'shokuhin', nameID: 'Pocky Strawberry Family Pack', nameJP: 'ポッキー いちご ファミリーパック',
    brand: 'Glico', origin: 'Osaka', priceJPY: 480, priceIDR: 52000, oldIDR: 65000,
    badges: ['sale'], rating: 4.7, sold: 8910, stock: 240,
    variants: [{label:'Strawberry'}, {label:'Chocolate'}, {label:'Matcha'}], glyph: '苺' },
  { id: 'p003', cat: 'shokuhin', nameID: 'Sake Junmai Daiginjo 720ml', nameJP: '純米大吟醸 720ml',
    brand: 'Dassai', origin: 'Yamaguchi', priceJPY: 6800, priceIDR: 728000,
    badges: ['limited'], rating: 4.8, sold: 312, stock: 12,
    variants: [{label:'720ml'}, {label:'1.8L'}], glyph: '酒' },
  { id: 'p004', cat: 'shokuhin', nameID: 'Ramen Ichiran Tonkotsu 5pcs', nameJP: '一蘭ラーメン とんこつ 5食',
    brand: 'Ichiran', origin: 'Fukuoka', priceJPY: 1980, priceIDR: 218000,
    badges: ['hot'], rating: 4.9, sold: 3204, stock: 180, variants: [], glyph: '麺' },
  { id: 'p005', cat: 'shokuhin', nameID: 'Kit Kat Wasabi 12 sticks', nameJP: 'キットカット わさび 12本',
    brand: 'Nestle Japan', origin: 'Tokyo', priceJPY: 850, priceIDR: 95000,
    badges: ['new'], rating: 4.5, sold: 642, stock: 96,
    variants: [{label:'Wasabi'}, {label:'Sakura'}, {label:'Yuzu'}], glyph: '雪' },
  { id: 'p006', cat: 'shokuhin', nameID: 'Bonito Flake Katsuobushi 80g', nameJP: '鰹節 80g',
    brand: 'Marutomo', origin: 'Shizuoka', priceJPY: 620, priceIDR: 68000,
    badges: [], rating: 4.6, sold: 410, stock: 220, variants: [], glyph: '魚' },

  // 衣類
  { id: 'p007', cat: 'irui', nameID: 'Yukata Cotton Sakura Pattern', nameJP: '浴衣 さくら柄',
    brand: 'Kyo-Yuzen', origin: 'Kyoto', priceJPY: 12800, priceIDR: 1380000, oldIDR: 1650000,
    badges: ['sale'], rating: 4.8, sold: 280, stock: 18,
    variants: [{label:'S'}, {label:'M'}, {label:'L'}, {label:'XL'}], glyph: '桜' },
  { id: 'p008', cat: 'irui', nameID: 'Uniqlo Heattech Ultra Warm', nameJP: 'ヒートテック ウルトラウォーム',
    brand: 'Uniqlo', origin: 'Tokyo', priceJPY: 2990, priceIDR: 320000,
    badges: ['hot'], rating: 4.7, sold: 5210, stock: 420,
    variants: [{label:'Black'}, {label:'Navy'}, {label:'Gray'}, {label:'White'}], glyph: '衣' },
  { id: 'p009', cat: 'irui', nameID: 'Onitsuka Tiger Mexico 66', nameJP: 'オニツカタイガー メキシコ66',
    brand: 'Onitsuka Tiger', origin: 'Kobe', priceJPY: 14300, priceIDR: 1540000,
    badges: ['new'], rating: 4.9, sold: 1820, stock: 64,
    variants: [{label:'40'}, {label:'41'}, {label:'42'}, {label:'43'}], glyph: '靴' },
  { id: 'p010', cat: 'irui', nameID: 'Tabi Socks Tradisional', nameJP: '足袋 ソックス',
    brand: 'Marugo', origin: 'Tokyo', priceJPY: 580, priceIDR: 64000,
    badges: [], rating: 4.4, sold: 920, stock: 310,
    variants: [{label:'Hitam'}, {label:'Putih'}, {label:'Indigo'}], glyph: '足' },
  { id: 'p011', cat: 'irui', nameID: 'Happi Coat Festival Matsuri', nameJP: '法被 祭り',
    brand: 'Edo-ya', origin: 'Tokyo', priceJPY: 4800, priceIDR: 518000,
    badges: ['limited'], rating: 4.7, sold: 184, stock: 22, variants: [], glyph: '祭' },
  { id: 'p012', cat: 'irui', nameID: 'Comme des Garçons Play Tee', nameJP: 'コム デ ギャルソン Tシャツ',
    brand: 'CDG Play', origin: 'Tokyo', priceJPY: 11000, priceIDR: 1180000,
    badges: ['hot'], rating: 4.8, sold: 612, stock: 38,
    variants: [{label:'White'}, {label:'Black'}], glyph: '♥' },

  // 美容
  { id: 'p013', cat: 'biyou', nameID: 'SK-II Facial Treatment Essence 230ml', nameJP: 'SK-II フェイシャル トリートメント エッセンス',
    brand: 'SK-II', origin: 'Tokyo', priceJPY: 18500, priceIDR: 1980000,
    badges: ['hot'], rating: 4.9, sold: 4200, stock: 86,
    variants: [{label:'75ml'}, {label:'160ml'}, {label:'230ml'}], glyph: '美' },
  { id: 'p014', cat: 'biyou', nameID: 'Shiseido Anessa Sunscreen SPF50+', nameJP: 'アネッサ パーフェクトUV',
    brand: 'Shiseido', origin: 'Tokyo', priceJPY: 3300, priceIDR: 358000,
    badges: ['new'], rating: 4.8, sold: 6840, stock: 240, variants: [], glyph: '陽' },
  { id: 'p015', cat: 'biyou', nameID: 'Hada Labo Gokujyun Hyaluronic Lotion', nameJP: '肌ラボ 極潤ヒアルロン液',
    brand: 'Rohto', origin: 'Osaka', priceJPY: 880, priceIDR: 98000,
    badges: ['sale'], rating: 4.7, sold: 9120, stock: 520, variants: [], glyph: '潤' },
  { id: 'p016', cat: 'biyou', nameID: 'Canmake Cream Cheek Blush', nameJP: 'キャンメイク クリームチーク',
    brand: 'Canmake', origin: 'Tokyo', priceJPY: 660, priceIDR: 74000,
    badges: [], rating: 4.6, sold: 3120, stock: 180,
    variants: [{label:'Apricot'}, {label:'Cherry'}, {label:'Lily'}, {label:'Plum'}], glyph: '頬' },
  { id: 'p017', cat: 'biyou', nameID: 'Kose Softymo Cleansing Oil', nameJP: 'コーセー ソフティモ クレンジングオイル',
    brand: 'Kose', origin: 'Tokyo', priceJPY: 720, priceIDR: 82000,
    badges: [], rating: 4.5, sold: 2410, stock: 320, variants: [], glyph: '清' },
  { id: 'p018', cat: 'biyou', nameID: 'DHC Lip Cream Original', nameJP: 'DHC リップクリーム',
    brand: 'DHC', origin: 'Tokyo', priceJPY: 770, priceIDR: 88000,
    badges: ['hot'], rating: 4.8, sold: 12400, stock: 680, variants: [], glyph: '唇' },

  // 電子
  { id: 'p019', cat: 'denshi', nameID: 'Sony WH-1000XM5 Headphones', nameJP: 'ソニー WH-1000XM5',
    brand: 'Sony', origin: 'Tokyo', priceJPY: 45800, priceIDR: 4980000, oldIDR: 5500000,
    badges: ['sale','hot'], rating: 4.9, sold: 820, stock: 24,
    variants: [{label:'Black'}, {label:'Silver'}, {label:'Midnight Blue'}], glyph: '♪' },
  { id: 'p020', cat: 'denshi', nameID: 'Nintendo Switch OLED', nameJP: 'Nintendo Switch 有機ELモデル',
    brand: 'Nintendo', origin: 'Kyoto', priceJPY: 37980, priceIDR: 4180000,
    badges: ['hot'], rating: 4.9, sold: 4920, stock: 42,
    variants: [{label:'White'}, {label:'Neon'}], glyph: '遊' },
  { id: 'p021', cat: 'denshi', nameID: 'Casio G-Shock GA-2100', nameJP: 'G-SHOCK GA-2100',
    brand: 'Casio', origin: 'Tokyo', priceJPY: 13200, priceIDR: 1480000,
    badges: ['new'], rating: 4.8, sold: 2140, stock: 88,
    variants: [{label:'Black'}, {label:'Beige'}, {label:'Pink'}], glyph: '時' },
  { id: 'p022', cat: 'denshi', nameID: 'Fujifilm Instax Mini 12', nameJP: 'チェキ instax mini 12',
    brand: 'Fujifilm', origin: 'Tokyo', priceJPY: 9800, priceIDR: 1080000,
    badges: [], rating: 4.7, sold: 1820, stock: 120,
    variants: [{label:'Pastel Blue'}, {label:'Lilac Purple'}, {label:'Mint Green'}, {label:'Clay White'}, {label:'Blossom Pink'}], glyph: '📷' },
  { id: 'p023', cat: 'denshi', nameID: 'Panasonic Lumix GH7 Body', nameJP: 'パナソニック LUMIX GH7',
    brand: 'Panasonic', origin: 'Osaka', priceJPY: 268000, priceIDR: 28900000,
    badges: ['limited'], rating: 4.9, sold: 84, stock: 6, variants: [], glyph: '映' },
  { id: 'p024', cat: 'denshi', nameID: 'Audio-Technica AT2020 USB', nameJP: 'AT2020USB+',
    brand: 'Audio-Technica', origin: 'Tokyo', priceJPY: 16800, priceIDR: 1820000,
    badges: [], rating: 4.7, sold: 412, stock: 28, variants: [], glyph: '音' },

  // 家庭
  { id: 'p025', cat: 'katei', nameID: 'Donabe Clay Pot 2L', nameJP: '土鍋 2L',
    brand: 'Iga-yaki', origin: 'Mie', priceJPY: 8800, priceIDR: 950000,
    badges: ['new'], rating: 4.8, sold: 320, stock: 24, variants: [], glyph: '鍋' },
  { id: 'p026', cat: 'katei', nameID: 'Tatami Floor Mat Mini 60×90', nameJP: '畳マット ミニ 60×90',
    brand: 'Igusa', origin: 'Kumamoto', priceJPY: 5400, priceIDR: 580000,
    badges: [], rating: 4.6, sold: 184, stock: 36, variants: [], glyph: '畳' },
  { id: 'p027', cat: 'katei', nameID: 'Kotatsu Blanket Reversible', nameJP: 'こたつ布団 リバーシブル',
    brand: 'Nitori', origin: 'Sapporo', priceJPY: 6900, priceIDR: 740000, oldIDR: 890000,
    badges: ['sale'], rating: 4.7, sold: 612, stock: 48,
    variants: [{label:'Beige'}, {label:'Navy'}, {label:'Sakura'}], glyph: '暖' },
  { id: 'p028', cat: 'katei', nameID: 'Hocho Knife Santoku 18cm', nameJP: '三徳包丁 18cm',
    brand: 'Shun Cutlery', origin: 'Seki', priceJPY: 18900, priceIDR: 2080000,
    badges: ['hot'], rating: 4.9, sold: 412, stock: 22, variants: [], glyph: '刀' },
  { id: 'p029', cat: 'katei', nameID: 'Yunomi Tea Cup Set 5pcs', nameJP: '湯呑 5客セット',
    brand: 'Mino-yaki', origin: 'Gifu', priceJPY: 3200, priceIDR: 348000,
    badges: [], rating: 4.7, sold: 240, stock: 84, variants: [], glyph: '湯' },
  { id: 'p030', cat: 'katei', nameID: 'Noren Curtain Wave Pattern', nameJP: '暖簾 波柄',
    brand: 'Kyoto Noren', origin: 'Kyoto', priceJPY: 2800, priceIDR: 308000,
    badges: ['limited'], rating: 4.8, sold: 168, stock: 18,
    variants: [{label:'Indigo'}, {label:'Beige'}], glyph: '波' },

  // 趣味
  { id: 'p031', cat: 'shumi', nameID: 'Figure Nezuko Demon Slayer 1/7', nameJP: '禰豆子 鬼滅の刃 1/7',
    brand: 'Aniplex', origin: 'Tokyo', priceJPY: 19800, priceIDR: 2180000,
    badges: ['preorder'], rating: 4.9, sold: 624, stock: 12, variants: [], glyph: '鬼' },
  { id: 'p032', cat: 'shumi', nameID: 'Manga Chainsaw Man Vol 1-12 Set', nameJP: 'チェンソーマン 1-12巻',
    brand: 'Shueisha', origin: 'Tokyo', priceJPY: 6480, priceIDR: 720000,
    badges: ['hot'], rating: 4.9, sold: 1840, stock: 56, variants: [], glyph: '漫' },
  { id: 'p033', cat: 'shumi', nameID: 'Gundam HG RX-78-2 1/144', nameJP: 'HG RX-78-2 ガンダム',
    brand: 'Bandai', origin: 'Tokyo', priceJPY: 1980, priceIDR: 218000,
    badges: [], rating: 4.8, sold: 2140, stock: 124, variants: [], glyph: '機' },
  { id: 'p034', cat: 'shumi', nameID: 'Pokemon TCG Booster Box 151', nameJP: 'ポケモンカード 151 BOX',
    brand: 'Pokemon Co.', origin: 'Tokyo', priceJPY: 5500, priceIDR: 610000, oldIDR: 720000,
    badges: ['sale','limited'], rating: 4.9, sold: 920, stock: 38, variants: [], glyph: '⚡' },
  { id: 'p035', cat: 'shumi', nameID: 'Nendoroid Hatsune Miku', nameJP: 'ねんどろいど 初音ミク',
    brand: 'Good Smile', origin: 'Tokyo', priceJPY: 5800, priceIDR: 640000,
    badges: ['new'], rating: 4.8, sold: 380, stock: 42, variants: [], glyph: '♬' },
  { id: 'p036', cat: 'shumi', nameID: 'Anime Poster Set Studio Ghibli', nameJP: 'ジブリ ポスター 5枚セット',
    brand: 'Studio Ghibli', origin: 'Tokyo', priceJPY: 2400, priceIDR: 268000,
    badges: [], rating: 4.7, sold: 540, stock: 96, variants: [], glyph: '画' },

  // 文具
  { id: 'p037', cat: 'bungu', nameID: 'Pilot G2 Pen Set 8 Colors', nameJP: 'パイロット G2 8色セット',
    brand: 'Pilot', origin: 'Tokyo', priceJPY: 1280, priceIDR: 142000,
    badges: ['hot'], rating: 4.9, sold: 4820, stock: 380, variants: [], glyph: '筆' },
  { id: 'p038', cat: 'bungu', nameID: 'Midori MD Notebook A5', nameJP: 'ミドリ MDノート A5',
    brand: 'Midori', origin: 'Tokyo', priceJPY: 1100, priceIDR: 124000,
    badges: [], rating: 4.8, sold: 1240, stock: 220,
    variants: [{label:'Plain'}, {label:'Lined'}, {label:'Grid'}], glyph: '本' },
  { id: 'p039', cat: 'bungu', nameID: 'Tombow Mono Eraser 10pcs', nameJP: 'トンボ MONO 消しゴム 10個',
    brand: 'Tombow', origin: 'Tokyo', priceJPY: 880, priceIDR: 98000,
    badges: ['sale'], rating: 4.7, sold: 2840, stock: 540, variants: [], glyph: '消' },
  { id: 'p040', cat: 'bungu', nameID: 'Washi Tape Set Sakura 10pcs', nameJP: '和紙テープ さくら 10巻',
    brand: 'mt', origin: 'Okayama', priceJPY: 1800, priceIDR: 198000,
    badges: ['new'], rating: 4.8, sold: 1620, stock: 180,
    variants: [{label:'Sakura'}, {label:'Wave'}, {label:'Origami'}], glyph: '紙' },
  { id: 'p041', cat: 'bungu', nameID: 'Hobonichi Techo Planner 2026', nameJP: 'ほぼ日手帳 2026',
    brand: 'Hobonichi', origin: 'Tokyo', priceJPY: 3500, priceIDR: 380000,
    badges: ['limited'], rating: 4.9, sold: 920, stock: 64,
    variants: [{label:'A6'}, {label:'A5 Cousin'}], glyph: '日' },
  { id: 'p042', cat: 'bungu', nameID: 'Buku Belajar Hiragana N5', nameJP: '日本語 N5 ひらがな',
    brand: 'Kodansha', origin: 'Tokyo', priceJPY: 1680, priceIDR: 188000,
    badges: [], rating: 4.6, sold: 720, stock: 140, variants: [], glyph: 'あ' },
];

const CATEGORY_BY_SLUG = Object.fromEntries(CATEGORIES.map(c => [c.slug, c]));
const PRODUCT_BY_ID = Object.fromEntries(PRODUCTS.map(p => [p.id, p]));

function productsByCategory(slug) {
  if (!slug || slug === 'all') return PRODUCTS;
  return PRODUCTS.filter(p => p.cat === slug);
}

// Hero campaign banners
const CAMPAIGNS = [
  { id: 'c1', tone: 'pink',   jp: 'ゴールデンウィーク', title: 'Golden Week SALE', desc: 'Diskon hingga 60% untuk 500+ produk' },
  { id: 'c2', tone: 'cyan',   jp: '送料無料',          title: 'Gratis Ongkir',     desc: 'Min. belanja ¥5,000 ke seluruh Indonesia' },
  { id: 'c3', tone: 'yellow', jp: '新規会員',          title: 'Bonus Member Baru', desc: '¥1,000 voucher + poin reward 2×' },
];

// Seed cart for demo (3 items)
const SEED_CART = [
  { key: 'p008:Black', product: PRODUCT_BY_ID['p008'], qty: 2, variant: 'Black' },
  { key: 'p016:Cherry', product: PRODUCT_BY_ID['p016'], qty: 1, variant: 'Cherry' },
  { key: 'p037', product: PRODUCT_BY_ID['p037'], qty: 3, variant: null },
];

const SEED_WISHLIST = ['p019', 'p020', 'p007', 'p031'];

// Mock user
const USER = {
  name: 'Sakura Tanaka',
  email: 'sakura.tanaka@email.com',
  phone: '+62 812-3456-7890',
  joined: 'Maret 2024',
  tier: 'Premium',
  points: 12480,
  initials: 'ST',
};

// Mock orders
const ORDERS = [
  {
    id: 'NM-2026-04821',
    date: '18 Mei 2026',
    status: 'shipping',
    items: [
      { product: PRODUCT_BY_ID['p019'], qty: 1, variant: 'Midnight Blue' },
      { product: PRODUCT_BY_ID['p018'], qty: 3, variant: null },
    ],
    subtotal: 5244000,
    shipping: 280000,
    total: 5524000,
    courier: 'EMS Japan Post',
    tracking: 'EE123456789JP',
  },
  {
    id: 'NM-2026-04702',
    date: '14 Mei 2026',
    status: 'packing',
    items: [
      { product: PRODUCT_BY_ID['p001'], qty: 2, variant: '100g' },
      { product: PRODUCT_BY_ID['p015'], qty: 1, variant: null },
    ],
    subtotal: 694000,
    shipping: 120000,
    total: 814000,
    courier: 'JNE REG',
    tracking: null,
  },
  {
    id: 'NM-2026-04588',
    date: '08 Mei 2026',
    status: 'done',
    items: [
      { product: PRODUCT_BY_ID['p020'], qty: 1, variant: 'White' },
    ],
    subtotal: 4180000,
    shipping: 320000,
    total: 4500000,
    courier: 'SiCepat BEST',
    tracking: 'SCP00998877',
  },
  {
    id: 'NM-2026-04501',
    date: '02 Mei 2026',
    status: 'pending',
    items: [
      { product: PRODUCT_BY_ID['p034'], qty: 1, variant: null },
      { product: PRODUCT_BY_ID['p040'], qty: 2, variant: 'Sakura' },
    ],
    subtotal: 1006000,
    shipping: 90000,
    total: 1096000,
    courier: 'JNT EZ',
    tracking: null,
  },
  {
    id: 'NM-2026-04412',
    date: '28 April 2026',
    status: 'done',
    items: [
      { product: PRODUCT_BY_ID['p007'], qty: 1, variant: 'M' },
    ],
    subtotal: 1380000,
    shipping: 140000,
    total: 1520000,
    courier: 'JNE YES',
    tracking: 'JNE123456',
  },
];

const ORDER_STATUS_LABEL = {
  pending:  { label: 'Menunggu Bayar', jp: '支払い待ち' },
  packing:  { label: 'Dikemas',        jp: '梱包中' },
  shipping: { label: 'Dikirim',        jp: '配送中' },
  done:     { label: 'Selesai',        jp: '完了' },
  refund:   { label: 'Refund',         jp: '返金' },
};

const SAMPLE_REVIEWS = [
  { user: 'Aiko Y.', initials: 'AY', rating: 5, date: '12 Mei 2026', text: 'Kualitas asli Jepang, packaging rapi sekali. Sampai dalam 7 hari via EMS. Bakal repeat order!' },
  { user: 'Budi S.', initials: 'BS', rating: 5, date: '08 Mei 2026', text: 'Pertama kali beli di sini, ternyata legit. Harganya kompetitif dibanding reseller lain.' },
  { user: 'Citra W.', initials: 'CW', rating: 4, date: '02 Mei 2026', text: 'Produk bagus, tapi pengiriman agak lebih lama dari estimasi. Tetap rekomendasi.' },
];

Object.assign(window, {
  CATEGORIES, CATEGORY_BY_SLUG, PRODUCTS, PRODUCT_BY_ID, BADGES,
  productsByCategory, fmtIDR, fmtJPY, fmtPrice,
  CAMPAIGNS, SEED_CART, SEED_WISHLIST, USER, ORDERS, ORDER_STATUS_LABEL,
  SAMPLE_REVIEWS,
});
