PHOTOBOX - SIAP UPLOAD (PHP 7.4+)
=================================
Versi ini kompatibel PHP 7.4 ke atas.

FITUR BARU (update)
- HASIL SETIAP SESI (otomatis, sesuai model yang dipilih):
    * Foto JPG 1..N (Model 1 = 4, Model 2 = 2, Model 3 = 3), resolusi 1920x1280.
    * Foto frame (gabungan) sesuai model, cetak 4R (photobox.jpg).
    * Video frame: komposisi frame sesuai model, tiap lubang berisi VIDEO LIVE saat pengambilan foto.
- Layar ambil foto & review memakai rasio TETAP 1920x1280 (3:2) sesuai lubang frame.
- Pemilihan MODEL FRAME di halaman awal (dengan gambar contoh + tombol MULAI):
    * Model 1 = 4 foto (2 strip, urutan dibalik 1234 | 4321)
    * Model 2 = 2 foto (satu lembar)
    * Model 3 = 3 foto (2 strip, urutan dibalik 123 | 321)
  Semua cetak 4R (2400 x 3600 px). Tiap lubang 3:2 (1920 x 1280).
- Preview kamera dikunci rasio 3:2 (1920:1280) sesuai lubang frame -> WYSIWYG.
- Timer sesi (7 / 10 / 15 menit / tanpa timer) tampil di TENGAH ATAS setelah tekan MULAI.
  Saat habis muncul popup; operator masukkan PIN untuk menambah 5 menit.
  (Timer sesi ini TERPISAH dari hitung mundur 3 detik saat menjepret.)
- DASHBOARD ADMIN (admin.php) dengan login PIN (default: 1234):
    1. Timer Sesi  -> atur 7/10/15 menit atau tanpa timer.
    2. Daftar Sesi -> cek Link Download, tampilkan Barcode/QR (kalau customer lupa scan),
                      Print Ulang (kirim ke Print Agent 127.0.0.1:3000), dan Hapus.
    3. Retensi     -> atur lama simpan (hari) sebelum auto-hapus (0 = tidak dihapus).
                      Waktu kadaluarsa disimpan di uploads/<id>/retention.txt.
    4. Upload Frame-> unggah desain PNG + nama, dipisah per model. Tanpa buka cPanel.
    5. Ubah PIN    -> ganti PIN operator.

CARA PASANG DI HOSTING
1. Arahkan domain/subdomain ke document root, lalu upload SEMUA isi folder ini ke sana.
2. Wajib HTTPS/SSL (kamera browser tidak jalan di HTTP biasa).
3. Pastikan folder uploads/ writable (permission 755, jika perlu 775).
4. Pastikan file settings.json writable oleh PHP (untuk simpan pengaturan admin).
5. Buka /health.php untuk cek kesiapan. Jika hijau, buka / (index) untuk photobooth.
6. Dashboard admin: buka /admin.php lalu login dengan PIN (default 1234, ganti di menu Ubah PIN).

STRUKTUR PENTING
index.php            halaman photobooth (pilih model -> foto -> edit -> QR)
admin.php            dashboard admin (login PIN)
settings.json        PIN, timer sesi, lama retensi (diubah lewat admin)
assets/              CSS & JavaScript
assets/previews/     gambar contoh model untuk halaman awal
api/frames.php       daftar frame per model (?model=model1|model2|model3)
api/upload.php       simpan hasil sesi (jumlah foto mengikuti model)
api/settings.php     baca setting publik (timer) untuk photobooth
api/admin.php        API dashboard admin (login, sesi, frame, retensi)
frames/model1|2|3/   TARUH DESAIN FRAME PNG DI SINI (per model)
uploads/             hasil sesi tersimpan di sini
download.php         halaman hasil dari QR
file.php             pengiriman file download
download-all.php     ZIP semua file sesi
cleanup.php          hapus sesi lama (jalankan via cron)
health.php           cek kesiapan hosting
print-agent/         Print Agent lokal (Python) untuk cetak otomatis

MEMBUAT FRAME SENDIRI
- Ukuran kanvas semua model: 2400 x 3600 px, PNG transparan, cetak 4R.
- Detail koordinat lubang tiap model ada di frames/README.txt.
- Model 1 & 3 dicetak lalu dipotong 2 strip di garis tengah (x = 1200); margin dibuat presisi.
- Upload lewat admin.php > Upload Frame (dipisah per model) — tidak perlu buka cPanel.

PRINT ULANG (Reprint)
- Tombol "Print Ulang" di dashboard mengirim foto gabungan ke Print Agent (127.0.0.1:3000).
- Print Agent harus berjalan di komputer photobooth. Lihat print-agent/printer_agent.py.

PEMBERSIHAN OTOMATIS (CRON)
- Atur lama simpan di admin > Retensi. Tambahkan cron sekali sehari:
    php /home/USERNAME/public_html/cleanup.php
- cleanup.php membaca uploads/<id>/retention.txt (baris 1 = unix timestamp kadaluarsa, 0 = jangan hapus).

SETTING PHP (.user.ini)
upload_max_filesize=64M
post_max_size=256M
max_file_uploads=20
memory_limit=256M
max_execution_time=120
Jika hosting tidak baca .user.ini, ubah lewat cPanel > MultiPHP INI Editor / PHP Options.

============================================================
PROTEKSI LISENSI (HMAC) - PENTING
============================================================
Aplikasi kini terkunci per-domain lewat file license.key (ditandatangani
HMAC-SHA256 memakai PB_LICENSE_SECRET di license.php).

Domain aktif saat ini : photobox.kondangin.my.id

CARA MENERBITKAN LISENSI UNTUK DOMAIN/KLIEN BARU:
  1. (Sekali saja) Ganti PB_LICENSE_SECRET di license.php dengan string
     acak rahasia milik Anda. JANGAN bagikan secret ini ke siapa pun.
  2. Buat kunci di komputer Anda:
        php tools/gen_license.php domainklien.com
        php tools/gen_license.php a.com b.com            (multi-domain)
        php tools/gen_license.php domainklien.com 2027-12-31   (ada kadaluarsa)
  3. Salin baris License hasilnya ke file license.key di root aplikasi klien.

CATATAN:
  - Tanpa license.key yang cocok dengan domain server, aplikasi menolak jalan
    (halaman "Aplikasi Terkunci" / respons 403 pada API).
  - Jangan unggah tools/gen_license.php ke server klien.
  - license.key, license.php, config.php, settings.json sudah diblokir dari
    akses web langsung via .htaccess.
