# 🏷️ SKU System - HaikzBot

## ✨ Fitur Baru: SKU/Code untuk Produk

Sekarang setiap produk punya **SKU (Stock Keeping Unit)** - kode unik yang lebih mudah diingat daripada ID angka!

**Contoh:**
- `d1_8a4f` = Discord Nitro 1 Bulan
- `d3_2k9m` = Discord Nitro 3 Bulan
- `d12_5n7p` = Discord Nitro 1 Tahun
- `spotify_1k3m` = Spotify Premium
- `canva_9x2l` = Canva Pro

**Keuntungan:**
- ✅ Mudah diingat (d3 = Discord 3 bulan)
- ✅ Tidak salah barang (d3 vs d1 jelas beda)
- ✅ Bisa grouping by prefix (semua d* = Discord)
- ✅ Cepat kirim: `/send sku:d3_8a4f user:@buyer`

---

## 🎯 Format SKU

### Format: `prefix_XXXX`

- **prefix** - bebas, sesuai kategori produk (a-z, 0-9, -)
- **XXXX** - 4 karakter random (a-z, 0-9)

### Contoh Prefix yang Bagus:

**Discord:**
- `d1_` = Discord Nitro 1 Bulan
- `d3_` = Discord Nitro 3 Bulan
- `d6_` = Discord Nitro 6 Bulan
- `d12_` = Discord Nitro 1 Tahun
- `db_` = Discord Nitro Basic

**Spotify:**
- `sp1_` = Spotify Premium 1 Bulan
- `sp3_` = Spotify Premium 3 Bulan
- `sp12_` = Spotify Premium 1 Tahun

**Canva:**
- `canva_` = Canva Pro
- `canva_team_` = Canva Team

**Netflix:**
- `nf_basic_` = Netflix Basic
- `nf_std_` = Netflix Standard
- `nf_prem_` = Netflix Premium

**VPN:**
- `vpn_nord_` = NordVPN
- `vpn_express_` = ExpressVPN

---

## 📝 Cara Buat/Edit SKU

### Via Dashboard:

1. Buka dashboard → **🛒 Products**
2. Klik **"+ New Product"** atau **Edit** existing
3. Di form, field pertama: **SKU/Code**
4. Isi prefix (contoh: `d3_`)
5. Klik **"🎲 Random"** untuk generate 4 digit random
6. Atau ketik manual: `d3_8a4f`
7. Save

**Auto-generate:**
- Kalau SKU kosong saat save → auto-generate: `product_XXXX`
- Kalau diisi → pakai yang diisi

**Validasi:**
- SKU harus unique (tidak boleh duplikat)
- Format bebas, tapi recommended: `prefix_XXXX`

---

## 🚀 Cara Pakai SKU

### 1. Command `/send` dengan SKU

**Sebelum (pakai product_id):**
```
/send user:@buyer product_id:1 quantity:1
```

**Sekarang (pakai SKU):**
```
/send sku:d3_8a4f user:@buyer quantity:1
```

**Lebih cepat & jelas!**

---

### 2. Dashboard Manual Delivery

Dropdown produk sekarang show SKU:
```
[d3_8a4f] Discord Nitro 3 Bulan - Rp75.000 (stock: 10)
[d1_2k9m] Discord Nitro 1 Bulan - Rp50.000 (stock: 5)
[spotify_1k3m] Spotify Premium - Rp30.000 (stock: 20)
```

Tinggal pilih dari dropdown → kirim!

---

### 3. Product List

Product card sekarang show SKU badge (biru):
```
┌─────────────────────────────┐
│ Discord Nitro 3 Bulan       │
│ Rp75.000                    │
│ [d3_8a4f] [Discord App] 📦10│
└─────────────────────────────┘
```

---

## 🔄 Migrasi Produk Lama

Produk yang sudah ada sebelum fitur SKU akan auto-generate SKU:
- Format: `product_XXXX` (4 random char)
- Contoh: `product_v2am`, `product_m47u`

**Cara ganti ke SKU yang lebih bagus:**

1. Dashboard → **🛒 Products**
2. Klik **Edit** pada produk
3. Ganti SKU dari `product_v2am` → `d3_8a4f`
4. Save

**Atau run script lagi:**
```bash
node generate-sku.js
```

---

## 💡 Best Practices

### 1. Konsisten dengan Prefix

**GOOD:**
```
d1_8a4f   = Discord Nitro 1 Bulan
d3_2k9m   = Discord Nitro 3 Bulan
d12_5n7p  = Discord Nitro 1 Tahun
```

**BAD:**
```
discord1_8a4f    = Discord Nitro 1 Bulan
d3month_2k9m     = Discord Nitro 3 Bulan
nitro_year_5n7p  = Discord Nitro 1 Tahun
```

### 2. Singkat & Jelas

**GOOD:**
- `d3_` = Discord 3 bulan (2 char)
- `sp_` = Spotify (2 char)
- `nf_` = Netflix (2 char)

**BAD:**
- `discord_nitro_3_month_` (terlalu panjang)
- `dn3m_` (tidak jelas)

### 3. Dokumentasikan Prefix

Buat list prefix di notes/docs:
```
d1_   = Discord Nitro 1 Bulan
d3_   = Discord Nitro 3 Bulan
d12_  = Discord Nitro 1 Tahun
db_   = Discord Nitro Basic
sp_   = Spotify Premium
canva_= Canva Pro
vpn_  = VPN
```

### 4. Jangan Ganti SKU Setelah Dipakai

Kalau SKU sudah dipakai di order/delivery, **jangan ganti**!
- Audit log pakai SKU
- Staff sudah hafal SKU
- Ganti SKU = bikin bingung

Kalau mau ganti, buat produk baru aja.

---

## 🔍 Cek SKU Produk

### Via Dashboard:
1. Tab **🛒 Products**
2. Lihat badge biru di setiap product card

### Via Database:
```bash
node -e "
import('better-sqlite3').then(m => {
  const db = m.default('/root/main/discord-bot/data/bot.db');
  const products = db.prepare('SELECT id, sku, name FROM products').all();
  console.table(products);
});
"
```

### Via Command (coming soon):
```
/product list
```
Output:
```
#1 [d1_8a4f] Discord Nitro 1 Bulan - Rp50.000 (stock: 10)
#2 [d3_2k9m] Discord Nitro 3 Bulan - Rp75.000 (stock: 5)
```

---

## 🐛 Troubleshooting

### Error: "SKU already exists"
**Solusi:**
- SKU harus unique
- Klik "🎲 Random" untuk generate baru
- Atau ganti prefix: `d3_8a4f` → `d3_9x2l`

### Error: "Produk dengan SKU X tidak ditemukan"
**Kemungkinan:**
- Typo di SKU (case-sensitive)
- Produk sudah dihapus
- SKU belum di-set

**Solusi:**
- Cek SKU di dashboard
- Copy-paste SKU (jangan ketik manual)

### SKU tidak muncul di dropdown
**Solusi:**
- Refresh halaman dashboard
- Cek produk enabled (tidak disabled)
- Run `node generate-sku.js` untuk produk lama

### Mau ganti semua SKU sekaligus
**Solusi:**
```bash
# Backup dulu
cp data/bot.db data/bot-backup.db

# Edit manual via SQL
node -e "
import('better-sqlite3').then(m => {
  const db = m.default('data/bot.db');
  
  // Contoh: ganti product_* jadi d1_*
  db.prepare('UPDATE products SET sku = ? WHERE id = ?').run('d1_8a4f', 1);
  db.prepare('UPDATE products SET sku = ? WHERE id = ?').run('d3_2k9m', 2);
  
  console.log('✅ Done');
});
"
```

---

## 📊 Statistics

Cek berapa produk punya SKU:
```sql
-- Total products
SELECT COUNT(*) FROM products;

-- Products with SKU
SELECT COUNT(*) FROM products WHERE sku IS NOT NULL;

-- Products without SKU
SELECT COUNT(*) FROM products WHERE sku IS NULL;

-- Group by prefix
SELECT 
  SUBSTR(sku, 1, INSTR(sku, '_')) AS prefix,
  COUNT(*) AS count
FROM products 
WHERE sku IS NOT NULL
GROUP BY prefix;
```

---

## 🎯 Use Cases

### Use Case 1: Owner Hafal SKU
```
Owner: "Kirim d3 ke @JohnDoe"
Staff: /send sku:d3_8a4f user:@JohnDoe quantity:1
✅ Cepat, tidak perlu cek product_id
```

### Use Case 2: Grouping by Prefix
```
Semua produk Discord: d*
Semua produk Spotify: sp*
Semua produk VPN: vpn*

Mudah filter & organize
```

### Use Case 3: Audit Log
```
Manual delivery log:
- d3_8a4f → @user1 (jelas: Discord 3 bulan)
- sp_1k3m → @user2 (jelas: Spotify)

Lebih readable daripada:
- product_id:1 → @user1 (apa ini?)
- product_id:5 → @user2 (apa ini?)
```

---

## 🚀 What's Next?

Fitur yang bisa ditambah nanti:
- [ ] Command `/product list` show SKU
- [ ] Autocomplete SKU di command `/send`
- [ ] Bulk edit SKU (ganti prefix semua produk sekaligus)
- [ ] SKU template (preset prefix untuk kategori)
- [ ] Export product list dengan SKU (CSV/Excel)

---

## 📝 Command Reference

### `/send` (Updated)
```
/send sku:d3_8a4f user:@buyer quantity:1
```

**Parameters:**
| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| sku | String | ✅ Yes | Product SKU (contoh: d3_8a4f) |
| user | User | ✅ Yes | Target user |
| quantity | Integer | ❌ No | Jumlah (1-10, default: 1) |

**Old format (product_id) sudah tidak dipakai lagi.**

---

## 🎉 Summary

**Before SKU:**
```
/send user:@buyer product_id:1 quantity:1
```
- Harus ingat ID angka
- Tidak jelas produk apa
- Mudah salah (ID 1 vs ID 11)

**After SKU:**
```
/send sku:d3_8a4f user:@buyer quantity:1
```
- ✅ Jelas: d3 = Discord 3 bulan
- ✅ Mudah diingat
- ✅ Tidak salah barang
- ✅ Cepat & efisien

---

**Dashboard URL:** http://localhost:4002  
**Token:** `622e5783c187f3e3da7ad0da3fc34f9b9b47894925476d7fdf29d75b152a880b`

Selamat menggunakan SKU System! 🏷️
