/* global React, Icon, MP, Sparkline, BarChart, Donut */

// ===== Mock Data =====
const ORDERS = [
  { id: "SMP-2845", mp: "shopee",   buyer: "Andini Pratiwi",   items: 2, total: 285000, status: "new",      date: "2 mnt lalu", sla: "23h 58m", sku: "MUG-CER-01", store: "Toko Berkah Jaya" },
  { id: "SMP-2844", mp: "tiktok",   buyer: "Rizky Maulana",    items: 1, total:  79000, status: "new",      date: "5 mnt lalu", sla: "23h 55m", sku: "TSH-BLK-M",  store: "Berkah Live" },
  { id: "SMP-2843", mp: "tokopedia",buyer: "Siti Nurhaliza",   items: 4, total: 412000, status: "packing",  date: "12 mnt lalu",sla: "12h 14m", sku: "BUNDLE-A",   store: "Toko Berkah Jaya" },
  { id: "SMP-2842", mp: "shopee",   buyer: "Bagus Setiawan",   items: 1, total: 159000, status: "packing",  date: "28 mnt lalu",sla: "11h 30m", sku: "BTL-500",    store: "Berkah Mall" },
  { id: "SMP-2841", mp: "lazada",   buyer: "Dewi Anggraini",   items: 3, total: 348000, status: "ready",    date: "1 jam lalu", sla: "—",       sku: "BUNDLE-B",   store: "Toko Berkah Jaya" },
  { id: "SMP-2840", mp: "tokopedia",buyer: "Hendro Wibowo",    items: 2, total: 226000, status: "shipped",  date: "3 jam lalu", sla: "—",       sku: "MUG-CER-02", store: "Toko Berkah Jaya" },
  { id: "SMP-2839", mp: "shopee",   buyer: "Putri Lestari",    items: 1, total:  89000, status: "shipped",  date: "5 jam lalu", sla: "—",       sku: "TSH-WHT-L",  store: "Berkah Mall" },
  { id: "SMP-2838", mp: "tiktok",   buyer: "Fajar Nugroho",    items: 5, total: 545000, status: "delivered",date: "kemarin",    sla: "—",       sku: "BUNDLE-C",   store: "Berkah Live" },
  { id: "SMP-2837", mp: "tokopedia",buyer: "Maya Kusuma",      items: 1, total:  95000, status: "issue",    date: "kemarin",    sla: "Stok kurang", sku: "BTL-1L",  store: "Toko Berkah Jaya" },
];

const PRODUCTS = [
  { sku: "MUG-CER-01", name: "Mug Keramik Polos 350ml",        cat: "Drinkware",  stock: 142, locked: 18, price: 45000,  cogs: 18000, matCost: 3500, mps: ["shopee","tokopedia","tiktok","lazada"], sold30: 218 },
  { sku: "MUG-CER-02", name: "Mug Keramik Motif Bunga 350ml",  cat: "Drinkware",  stock: 86,  locked: 12, price: 52000,  cogs: 22000, matCost: 3500, mps: ["shopee","tokopedia","tiktok"], sold30: 164 },
  { sku: "TSH-BLK-M",  name: "Kaos Cotton Combed Hitam M",     cat: "Apparel",    stock: 7,   locked: 4,  price: 79000,  cogs: 32000, matCost: 1800, mps: ["shopee","tiktok","lazada"], sold30: 312, low: true },
  { sku: "TSH-WHT-L",  name: "Kaos Cotton Combed Putih L",     cat: "Apparel",    stock: 28,  locked: 6,  price: 79000,  cogs: 32000, matCost: 1800, mps: ["shopee","tokopedia"], sold30: 198 },
  { sku: "BTL-500",    name: "Botol Minum Stainless 500ml",    cat: "Drinkware",  stock: 64,  locked: 9,  price: 159000, cogs: 68000, matCost: 4200, mps: ["shopee","tokopedia","tiktok","lazada","blibli"], sold30: 89 },
  { sku: "BTL-1L",     name: "Botol Minum Stainless 1L",       cat: "Drinkware",  stock: 0,   locked: 0,  price: 189000, cogs: 82000, matCost: 4200, mps: ["shopee","tokopedia","tiktok"], sold30: 41, oos: true },
  { sku: "BUNDLE-A",   name: "Paket Hampers Mug + Box",        cat: "Bundle",     stock: 38,  locked: 8,  price: 125000, cogs: 48000, matCost: 8500, mps: ["shopee","tokopedia"], sold30: 102 },
  { sku: "BUNDLE-B",   name: "Paket Couple Botol + Mug",       cat: "Bundle",     stock: 22,  locked: 5,  price: 215000, cogs: 95000, matCost: 9200, mps: ["shopee","tokopedia","lazada"], sold30: 76 },
];

// ===== Material/Packaging Stock =====
const MATERIALS = [
  { sku:"MAT-BOX-S",  name:"Kardus Polos S (15×10×8)",  unit:"pcs", stock:842,  reorder:200, cost:1200,  vendor:"PT Karton Sejahtera", lastIn:"3 hari lalu", used30:680 },
  { sku:"MAT-BOX-M",  name:"Kardus Polos M (25×20×15)", unit:"pcs", stock:412,  reorder:150, cost:2100,  vendor:"PT Karton Sejahtera", lastIn:"3 hari lalu", used30:520 },
  { sku:"MAT-BOX-L",  name:"Kardus Polos L (40×30×25)", unit:"pcs", stock:98,   reorder:100, cost:3800,  vendor:"PT Karton Sejahtera", lastIn:"1 minggu lalu", used30:140, low:true },
  { sku:"MAT-BBL",    name:"Bubble Wrap 50cm",           unit:"meter", stock:1240, reorder:300, cost:850, vendor:"CV Plastik Mandiri",  lastIn:"5 hari lalu", used30:1850 },
  { sku:"MAT-OPP",    name:"Plastik OPP 25×35",          unit:"pcs", stock:2840, reorder:500, cost:180,  vendor:"CV Plastik Mandiri",  lastIn:"5 hari lalu", used30:3120 },
  { sku:"MAT-LKB",    name:"Lakban Coklat 48mm",         unit:"roll",stock:42,   reorder:20,  cost:8500, vendor:"Toko ATK Jaya",       lastIn:"2 minggu lalu", used30:64 },
  { sku:"MAT-FIL",    name:"Filler Kertas 1kg",          unit:"kg",  stock:18,   reorder:25,  cost:6500, vendor:"PT Karton Sejahtera", lastIn:"1 minggu lalu", used30:32, low:true },
  { sku:"MAT-LBL",    name:"Label Resi Termal 10×15",    unit:"pcs", stock:5840, reorder:1000,cost:120,  vendor:"CV Print Express",    lastIn:"4 hari lalu", used30:4220 },
  { sku:"MAT-THK",    name:"Kartu Ucapan Thank You",     unit:"pcs", stock:1240, reorder:200, cost:450,  vendor:"CV Print Express",    lastIn:"4 hari lalu", used30:980 },
  { sku:"MAT-AMP",    name:"Amplop Coklat A4",            unit:"pcs", stock:380,  reorder:100, cost:380,  vendor:"Toko ATK Jaya",       lastIn:"1 minggu lalu", used30:240 },
];

// ===== Purchase Orders for materials =====
const MAT_POS = [
  { id:"PO-MAT-0042", date:"28 Apr 2026", vendor:"PT Karton Sejahtera", items:3, total:2840000, status:"received",  paid:true,  due:"—" },
  { id:"PO-MAT-0041", date:"25 Apr 2026", vendor:"CV Plastik Mandiri",  items:2, total:1240000, status:"received",  paid:true,  due:"—" },
  { id:"PO-MAT-0040", date:"22 Apr 2026", vendor:"CV Print Express",    items:2, total:780000,  status:"received",  paid:false, due:"5 Mei 2026" },
  { id:"PO-MAT-0039", date:"18 Apr 2026", vendor:"Toko ATK Jaya",       items:1, total:340000,  status:"received",  paid:true,  due:"—" },
  { id:"PO-MAT-0038", date:"15 Apr 2026", vendor:"PT Karton Sejahtera", items:2, total:1620000, status:"received",  paid:true,  due:"—" },
  { id:"PO-MAT-0037", date:"30 Apr 2026", vendor:"PT Karton Sejahtera", items:2, total:980000,  status:"in-transit",paid:false, due:"10 Mei 2026" },
  { id:"PO-MAT-0036", date:"01 Mei 2026", vendor:"CV Plastik Mandiri",  items:3, total:1480000, status:"draft",     paid:false, due:"—" },
];

const STORES = [
  { name: "Toko Berkah Jaya",    mp: "shopee",    status: "synced", products: 124, orders30: 1248, lastSync: "2 mnt lalu" },
  { name: "Toko Berkah Jaya",    mp: "tokopedia", status: "synced", products: 124, orders30:  892, lastSync: "4 mnt lalu" },
  { name: "Berkah Live",         mp: "tiktok",    status: "synced", products:  98, orders30:  654, lastSync: "1 mnt lalu" },
  { name: "Toko Berkah Jaya",    mp: "lazada",    status: "warning",products:  86, orders30:  213, lastSync: "Token akan kedaluwarsa", warn: "Token API berakhir dalam 3 hari" },
  { name: "Berkah Mall",         mp: "shopee",    status: "synced", products: 124, orders30:  442, lastSync: "6 mnt lalu" },
  { name: "Berkah Mall",         mp: "blibli",    status: "syncing",products:  64, orders30:   78, lastSync: "Sinkronisasi…" },
];

const RETURNS = [
  { id: "RET-0124", order: "SMP-2812", buyer: "Indah Permata", item: "Mug Keramik Polos 350ml", reason: "Pecah saat diterima",     status: "review",   amount: 45000, mp:"shopee" },
  { id: "RET-0123", order: "SMP-2807", buyer: "Bayu Saputra",  item: "Kaos Cotton Combed Hitam M", reason: "Ukuran tidak sesuai",  status: "approved", amount: 79000, mp:"tiktok" },
  { id: "RET-0122", order: "SMP-2799", buyer: "Lina Marlina",  item: "Botol Stainless 500ml",      reason: "Tutup bocor",          status: "received", amount:159000, mp:"tokopedia" },
  { id: "RET-0121", order: "SMP-2790", buyer: "Tegar Pradana", item: "Paket Hampers Mug + Box",    reason: "Salah varian",         status: "rejected", amount:125000, mp:"shopee" },
];

window.MOCK = { ORDERS, PRODUCTS, STORES, RETURNS, MATERIALS, MAT_POS };

// ===== Helpers =====
const fmtRp = (n) => "Rp" + n.toLocaleString("id-ID");
const fmtRpShort = (n) => {
  if (n >= 1_000_000_000) return "Rp" + (n/1_000_000_000).toFixed(1) + "M";
  if (n >= 1_000_000) return "Rp" + (n/1_000_000).toFixed(1) + "jt";
  if (n >= 1_000) return "Rp" + (n/1_000).toFixed(0) + "rb";
  return "Rp" + n;
};

const STATUS_META = {
  new:       { label: "Pesanan Baru",   chip: "chip-blue"  },
  packing:   { label: "Sedang Packing", chip: "chip-amber" },
  ready:     { label: "Siap Kirim",     chip: "chip-brand" },
  shipped:   { label: "Dikirim",        chip: "chip-blue"  },
  delivered: { label: "Selesai",        chip: "chip-green" },
  issue:     { label: "Bermasalah",     chip: "chip-rose"  },
};

window.fmtRp = fmtRp;
window.fmtRpShort = fmtRpShort;
window.STATUS_META = STATUS_META;

// ===== Date helpers (id-ID) =====
const ID_DAYS   = ['Minggu','Senin','Selasa','Rabu','Kamis','Jumat','Sabtu'];
const ID_MONTHS = ['Januari','Februari','Maret','April','Mei','Juni','Juli','Agustus','September','Oktober','November','Desember'];
const ID_MONTHS_SHORT = ['Jan','Feb','Mar','Apr','Mei','Jun','Jul','Agu','Sep','Okt','Nov','Des'];

// "Sabtu, 2 Mei 2026"
const fmtDateLong = (d = new Date()) =>
  `${ID_DAYS[d.getDay()]}, ${d.getDate()} ${ID_MONTHS[d.getMonth()]} ${d.getFullYear()}`;

// "2 Mei 2026"
const fmtDate = (d = new Date()) =>
  `${d.getDate()} ${ID_MONTHS[d.getMonth()]} ${d.getFullYear()}`;

// "2 Mei" — short
const fmtDateShort = (d = new Date()) =>
  `${d.getDate()} ${ID_MONTHS_SHORT[d.getMonth()]}`;

// "Mei 2026"
const fmtMonthYear = (d = new Date()) =>
  `${ID_MONTHS[d.getMonth()]} ${d.getFullYear()}`;

// last-day-of-month label e.g. "30 April 2026" given an offset (0=this month, -1=previous)
const fmtEndOfMonth = (offset = 0, base = new Date()) => {
  const d = new Date(base.getFullYear(), base.getMonth() + offset + 1, 0);
  return fmtDate(d);
};

// month+year for an offset
const fmtMonthYearOffset = (offset = 0, base = new Date()) => {
  const d = new Date(base.getFullYear(), base.getMonth() + offset, 1);
  return fmtMonthYear(d);
};

// "07:42 WIB" — current time
const fmtClock = (d = new Date()) =>
  `${String(d.getHours()).padStart(2,'0')}.${String(d.getMinutes()).padStart(2,'0')} WIB`;

window.fmtDate = fmtDate;
window.fmtDateLong = fmtDateLong;
window.fmtDateShort = fmtDateShort;
window.fmtMonthYear = fmtMonthYear;
window.fmtMonthYearOffset = fmtMonthYearOffset;
window.fmtEndOfMonth = fmtEndOfMonth;
window.fmtClock = fmtClock;

// Live clock hook
window.useNow = function useNow(intervalMs = 60_000) {
  const [now, setNow] = React.useState(() => new Date());
  React.useEffect(() => {
    const t = setInterval(() => setNow(new Date()), intervalMs);
    return () => clearInterval(t);
  }, [intervalMs]);
  return now;
};
