LUCKY SPIN - INSTALLASI
========================
1. Gunakan hosting PHP 8.0+ (direkomendasikan 8.2+) yang mendukung session, json, file write, dan HTTPS.
2. Upload isi ZIP ke public_html/ atau folder website tujuan. Extract ZIP di File Manager.
3. Kunjungi https://domain-anda.com/admin.php untuk setup password admin pertama kali (minimum 10 karakter).
4. Login admin -> atur hadiah/bobot -> Simpan -> Generate Voucher -> salin kode ke member.
5. Member buka https://domain-anda.com/index.php, tempel voucher, klik Aktivasi, lalu Putar.
6. Dashboard menampilkan hasil dan kode yang sudah digunakan.

FOLDER:
index.php      Halaman member
admin.php      Halaman pengelola
api.php        Penentuan hadiah & validasi voucher di server
assets/        CSS/JS
 data/         Database file JSON (DILARANG dapat diakses publik)

PENTING:
- Hadiah adalah undian. Bobot menentukan peluang relatif, misal 30 vs 5 berarti perbandingan 6:1.
- Ini sistem voucher/undian berbasis PHP, BUKAN halaman HTML statis saja. Tidak berfungsi di hosting yang hanya menerima HTML (misalnya Cloudflare Pages tanpa Functions).
- Kode voucher bisa dipakai sekali; penentuan hadiah dan penandaan 'used' dilakukan atomik dengan flock.
- Hadiah tidak dikirim otomatis; klaim manual ke penyelenggara. Integrasi saldo/member & akun pengguna belum termasuk.
- Lindungi direktori data/ dengan .htaccess (sudah disertakan). Pada server Nginx, .htaccess diabaikan: atur blokir akses /data/ di konfigurasi Nginx, atau pindahkan DATAFILE di api.php ke folder di luar web root sebelum produksi.
- Jangan gunakan layanan ini untuk janji hadiah palsu. Pastikan hadiah, peluang dan syarat promo transparan, serta patuhi aturan promo/undian setempat.
- Backup data/store.json rutin. File ini menyimpan password hash admin, kode voucher dan riwayat.
- Jika setelah di-upload error permission, beri PHP izin tulis di folder data/ sesuai user hosting (umumnya 755 folder, 644 file; bila perlu 775 sesuai konfigurasi, jangan 777).
- Jalankan di HTTPS agar kode voucher dan sesi admin terlindungi.

UPDATE MANAJEMEN VOUCHER:
- Semua voucher disimpan permanen, bisa dicari dan dilihat setelah refresh.
- Filter status Belum Dipakai/Sudah Dipakai, tampil 100 voucher per halaman.
- Download Semua CSV mencakup semua voucher sesuai filter, bukan hanya halaman aktif.
- Hapus Terpilih hanya berlaku untuk voucher belum dipakai.
- Hapus Semua Belum Dipakai menghapus voucher aktif, hati-hati.

CARA UPDATE WEBSITE YANG SUDAH TERPASANG:
1. BACKUP folder spinwheel_voucher/data/ (khususnya store.json).
2. Upload ZIP baru lalu Extract (overwrite) file PHP, JS, CSS.
3. JANGAN hapus/overwrite folder data/store.json yang ada di hosting.
4. Refresh panel admin (Ctrl+F5); login admin lama tetap berlaku.


VERSI HADIAH TETAP (V3)
- Kode baru 4, 5, atau 6 karakter; default 6. Tidak menggunakan prefix.
- Pada Buat Voucher pilih hadiah sebelum Generate. Semua kode batch itu mendapat hadiah tersebut.
- Pada Semua Voucher dapat centang kode belum digunakan lalu pilih Tetapkan Hadiah.
- Kode lama dari V1/V2 tetap disimpan; jika belum punya hadiah tetap, admin WAJIB menetapkan hadiahnya sebelum kode dapat diputar.
- Spin tidak random: server membaca assigned_prize_id dari voucher.
- BACKUP folder data/store.json sebelum upgrade. Jangan timpa/hapus folder data.
- Kode 4 karakter lebih rentan ditebak. Sebaiknya gunakan 6 karakter, HTTPS, dan jangan mengekspose daftar voucher.
- Tidak ada integrasi kredit saldo otomatis. Admin perlu verifikasi/klaim manual.
