-- Skema database server lisensi Pustaka Biodiversitas (MySQL/MariaDB).
-- Impor sekali lewat cPanel → phpMyAdmin → database Anda → Import.
-- (Berkas ini ditolak .htaccess bila dibuka dari browser; boleh juga tidak diunggah.)

CREATE TABLE IF NOT EXISTS lisensi (
  id             INT AUTO_INCREMENT PRIMARY KEY,
  kode_hash      CHAR(64) NOT NULL UNIQUE,      -- HMAC-SHA256 kode; kode asli tidak disimpan
  kode_akhir     CHAR(4) NOT NULL,               -- 4 karakter terakhir, untuk dikenali di admin
  kode_enkripsi  TEXT,                           -- kode terenkripsi (kunci di config.php), agar admin bisa melihat & mengirim ulang
  terkirim       DATETIME NULL,                  -- kapan kode terakhir dikirim lewat email
  nama           VARCHAR(200) NOT NULL,
  email          VARCHAR(200) NOT NULL DEFAULT '',
  maks_perangkat INT NOT NULL DEFAULT 2,
  status         VARCHAR(10) NOT NULL DEFAULT 'aktif',  -- aktif | dicabut
  catatan        TEXT,
  dibuat         DATETIME NOT NULL
) DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS aktivasi (
  id             INT AUTO_INCREMENT PRIMARY KEY,
  lisensi_id     INT NOT NULL,
  perangkat      CHAR(32) NOT NULL,              -- hash ID mesin (bukan ID mesin asli)
  nama_perangkat VARCHAR(100) NOT NULL DEFAULT '',
  versi          VARCHAR(20) NOT NULL DEFAULT '',
  os             VARCHAR(20) NOT NULL DEFAULT '',
  pertama        DATETIME NOT NULL,
  terakhir       DATETIME NOT NULL,              -- pemeriksaan lisensi terakhir
  lokasi         VARCHAR(120) NOT NULL DEFAULT '', -- provinsi, negara saat pemeriksaan terakhir (bukan kota/koordinat)
  UNIQUE KEY lisensi_perangkat (lisensi_id, perangkat),
  FOREIGN KEY (lisensi_id) REFERENCES lisensi(id) ON DELETE CASCADE
) DEFAULT CHARSET=utf8mb4;

-- percobaan aktivasi yang gagal, untuk membatasi tebakan kode (dihapus otomatis setelah 1 hari)
CREATE TABLE IF NOT EXISTS percobaan (
  id    INT AUTO_INCREMENT PRIMARY KEY,
  ip    VARCHAR(45) NOT NULL,
  waktu DATETIME NOT NULL,
  KEY ip_waktu (ip, waktu)
) DEFAULT CHARSET=utf8mb4;

-- pesanan lisensi dari halaman panduan/beli.html (diproses manual lewat admin.php)
CREATE TABLE IF NOT EXISTS pesanan (
  id            INT AUTO_INCREMENT PRIMARY KEY,
  nomor         VARCHAR(20) NOT NULL UNIQUE,     -- PB-yymmdd-XXXX
  dibuat        DATETIME NOT NULL,
  status        VARCHAR(12) NOT NULL DEFAULT 'baru',  -- baru | dibayar | selesai | batal
  nama          VARCHAR(200) NOT NULL,           -- nama yang akan tercantum di lisensi
  email         VARCHAR(200) NOT NULL,
  lembaga       VARCHAR(200) NOT NULL DEFAULT '',
  negara        VARCHAR(100) NOT NULL DEFAULT '',
  wilayah       VARCHAR(4) NOT NULL DEFAULT 'id',  -- id | intl (menentukan harga)
  bahasa        VARCHAR(2) NOT NULL DEFAULT 'id',
  item          TEXT NOT NULL,                   -- JSON rincian keranjang
  total         BIGINT NOT NULL DEFAULT 0,       -- Rupiah
  perangkat     INT NOT NULL DEFAULT 0,          -- total komputer
  catatan       TEXT,
  catatan_admin TEXT,
  ip            VARCHAR(45) NOT NULL DEFAULT '', -- pembatasan spam
  ip_negara     VARCHAR(2) NOT NULL DEFAULT '',  -- negara koneksi menurut Cloudflare (sinyal harga Indonesia)
  promo         VARCHAR(40) NOT NULL DEFAULT '', -- kode promo yang dipakai
  diskon        BIGINT NOT NULL DEFAULT 0,       -- potongan promo (Rupiah)
  KEY ip_dibuat (ip, dibuat)
) DEFAULT CHARSET=utf8mb4;

-- kode promo (dibuat di admin.php; diperiksa api/promo.php dan api/pesan.php)
CREATE TABLE IF NOT EXISTS promo (
  id          INT AUTO_INCREMENT PRIMARY KEY,
  kode        VARCHAR(40) NOT NULL UNIQUE,
  persen      INT NOT NULL,                    -- 1–100
  jenis       VARCHAR(200) NOT NULL DEFAULT '', -- id jenis lisensi dipisah koma; kosong = semua
  maks_pakai  INT NULL,                        -- NULL = tanpa batas
  dipakai     INT NOT NULL DEFAULT 0,
  sampai      DATE NULL,                       -- berlaku sampai tanggal ini (UTC)
  aktif       INT NOT NULL DEFAULT 1,
  catatan     VARCHAR(200) NOT NULL DEFAULT '',
  dibuat      DATETIME NOT NULL
) DEFAULT CHARSET=utf8mb4;
