-- =====================================================================
-- SIMAP — Hadiah literasi dan penukaran poin
--
--   mysql -u root -p simap_db < database/12_hadiah_literasi.sql
--
-- Poin yang tidak bisa ditukar apa-apa akan berhenti memotivasi setelah
-- beberapa minggu. Modul ini menutup lingkarannya: siswa menukar poin,
-- guru atau pustakawan memverifikasi, lalu hadiah diserahkan.
--
-- Poin dipotong saat penukaran diajukan, bukan saat disetujui. Bila
-- ditolak, poin dikembalikan utuh. Tanpa itu, satu siswa bisa mengajukan
-- sepuluh penukaran sekaligus dengan poin yang hanya cukup untuk satu.
-- =====================================================================

SET NAMES utf8mb4;

CREATE TABLE IF NOT EXISTS hadiah (
  id         INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  nama       VARCHAR(120) NOT NULL,
  deskripsi  VARCHAR(255) NULL,
  poin       INT UNSIGNED NOT NULL DEFAULT 100,
  stok       INT NOT NULL DEFAULT 0 COMMENT 'negatif berarti tidak dibatasi',
  gambar     VARCHAR(255) NULL,
  kategori   VARCHAR(40) NULL,
  is_aktif   TINYINT(1) NOT NULL DEFAULT 1,
  created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS hadiah_klaim (
  id            BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  siswa_id      INT UNSIGNED NOT NULL,
  hadiah_id     INT UNSIGNED NOT NULL,
  kode          VARCHAR(16) NOT NULL,
  poin_terpakai INT UNSIGNED NOT NULL,
  status        ENUM('MENUNGGU','DISETUJUI','DITOLAK','DIAMBIL')
                NOT NULL DEFAULT 'MENUNGGU',
  catatan_guru  VARCHAR(255) NULL,
  diverifikasi_oleh INT UNSIGNED NULL,
  diverifikasi_at   DATETIME NULL,
  diambil_at    DATETIME NULL,
  created_at    DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  UNIQUE KEY uq_kode_klaim (kode),
  KEY idx_klaim (siswa_id, status),
  CONSTRAINT fk_hk_siswa  FOREIGN KEY (siswa_id)  REFERENCES siswa(id)  ON DELETE CASCADE,
  CONSTRAINT fk_hk_hadiah FOREIGN KEY (hadiah_id) REFERENCES hadiah(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

INSERT IGNORE INTO permissions (kode, nama, modul) VALUES
 ('literasi.hadiah', 'Kelola hadiah literasi',       'perpus'),
 ('literasi.klaim',  'Verifikasi penukaran poin',    'perpus');

INSERT IGNORE INTO role_permission (role_id, permission_id)
SELECT r.id, p.id FROM roles r JOIN permissions p ON p.kode IN ('literasi.hadiah','literasi.klaim')
 WHERE r.kode IN ('SUPERADMIN','KEPALA_SEKOLAH','PUSTAKAWAN','GURU','WALI_KELAS');

INSERT IGNORE INTO hadiah (nama, deskripsi, poin, stok, kategori) VALUES
 ('Tambahan Nilai Bahasa Indonesia','Tambahan 5 poin nilai harian, diverifikasi guru mapel.',300,50,'AKADEMIK'),
 ('Buku Bacaan Milik Sendiri','Pilih satu buku dari rak hadiah perpustakaan.',500,10,'BARANG'),
 ('Sertifikat Pembaca Terbaik','Sertifikat cetak bertanda tangan kepala sekolah.',400,25,'PENGHARGAAN'),
 ('Voucher Kantin Rp15.000','Ditukar di kantin sekolah pada jam istirahat.',250,30,'BARANG'),
 ('Bebas Tugas Meringkas','Sekali kesempatan bebas dari tugas meringkas.',350,20,'AKADEMIK'),
 ('Pinjam Buku Dua Kali Lipat','Boleh meminjam empat buku sekaligus selama sebulan.',200,-1,'FASILITAS');

-- ------------------------------------------------- BUKU DIGITAL CONTOH
-- Tiga berkas PDF disertakan dalam paket supaya pembaca di dalam aplikasi
-- dapat dicoba tanpa menunggu sekolah mengunggah koleksinya sendiri.
UPDATE buku SET file_ebook = 'ebook/buku-contoh-1.pdf', format_ebook = 'PDF',
                jenis = 'KEDUANYA', jumlah_halaman = 12, boleh_unduh = 0
 WHERE kode_buku = 'BK-001';
UPDATE buku SET file_ebook = 'ebook/buku-contoh-2.pdf', format_ebook = 'PDF',
                jenis = 'KEDUANYA', jumlah_halaman = 12, boleh_unduh = 0
 WHERE kode_buku = 'BK-004';
UPDATE buku SET file_ebook = 'ebook/buku-contoh-3.pdf', format_ebook = 'PDF',
                jenis = 'DIGITAL', jumlah_halaman = 12, boleh_unduh = 1
 WHERE kode_buku = 'BK-008';

SELECT 'modul hadiah siap' AS info,
       (SELECT COUNT(*) FROM hadiah) AS hadiah,
       (SELECT COUNT(*) FROM buku WHERE file_ebook IS NOT NULL) AS buku_digital;
