-- ===========================================================================
--  Future_151 Smart Trade - skema database lisensi
--
--  Cara pakai:
--    1. Buat database baru di hosting (atau pakai yang sudah ada)
--    2. Import berkas ini lewat phpMyAdmin  ->  tab Import
--    3. Isi kredensialnya di server/konfigurasi.php
--
--  Semua tabel diberi awalan f151_ supaya tidak bentrok dengan tabel lain
--  yang sudah ada di database yang sama.
-- ===========================================================================

SET NAMES utf8mb4;

-- --------------------------------------------------------------- pengguna
CREATE TABLE IF NOT EXISTS f151_users (
  id                INT AUTO_INCREMENT PRIMARY KEY,
  username          VARCHAR(64)  NOT NULL UNIQUE,
  password_hash     VARCHAR(255) NOT NULL,
  nama              VARCHAR(128) NOT NULL DEFAULT '',
  email             VARCHAR(128) NOT NULL DEFAULT '',
  catatan           VARCHAR(255) NOT NULL DEFAULT '',
  aktif             TINYINT(1)   NOT NULL DEFAULT 1,

  -- lisensi menempel pada pengguna: satu pengguna satu key
  license_key       VARCHAR(19)  DEFAULT NULL,     -- XXXX-XXXX-XXXX-XXXX
  license_expiry    DATE         DEFAULT NULL,
  license_bulan     TINYINT      DEFAULT NULL,     -- lama berlaku saat dibuat (1-12)
  license_dibuat    DATETIME     DEFAULT NULL,
  license_aktif_pada DATETIME    DEFAULT NULL,     -- kapan user memasukkan key
  license_perangkat VARCHAR(191) DEFAULT NULL,     -- sidik jari komputer pemakai

  dibuat            DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP,
  login_terakhir    DATETIME     DEFAULT NULL,
  ip_terakhir       VARCHAR(45)  DEFAULT NULL,
  INDEX idx_key (license_key)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- ------------------------------------------------------------------ admin
CREATE TABLE IF NOT EXISTS f151_admins (
  id            INT AUTO_INCREMENT PRIMARY KEY,
  username      VARCHAR(64)  NOT NULL UNIQUE,
  password_hash VARCHAR(255) NOT NULL,
  dibuat        DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP,
  login_terakhir DATETIME    DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- ------------------------------------------------- sesi (token sementara)
CREATE TABLE IF NOT EXISTS f151_sessions (
  token       CHAR(64) PRIMARY KEY,
  peran       ENUM('user','admin') NOT NULL,
  pemilik_id  INT NOT NULL,
  kedaluwarsa DATETIME NOT NULL,
  dibuat      DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  INDEX idx_kedaluwarsa (kedaluwarsa)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- ------------------------------------------------------- catatan kegiatan
CREATE TABLE IF NOT EXISTS f151_log (
  id          INT AUTO_INCREMENT PRIMARY KEY,
  waktu       DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  aktor       VARCHAR(80)  NOT NULL DEFAULT '',
  aksi        VARCHAR(48)  NOT NULL DEFAULT '',
  keterangan  VARCHAR(255) NOT NULL DEFAULT '',
  ip          VARCHAR(45)  NOT NULL DEFAULT '',
  INDEX idx_waktu (waktu)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- --------------------------------------- pembatas percobaan login (anti tebak)
CREATE TABLE IF NOT EXISTS f151_gagal (
  ip        VARCHAR(45) NOT NULL,
  username  VARCHAR(64) NOT NULL DEFAULT '',
  jumlah    INT NOT NULL DEFAULT 0,
  terakhir  DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (ip, username)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- ===========================================================================
--  Admin pertama TIDAK dibuat di sini.
--
--  Hash password harus dibuat oleh PHP sendiri (password_hash), tidak boleh
--  ditulis tangan. Buka pasang.php lewat browser satu kali untuk membuat admin
--  pertama, lalu HAPUS pasang.php dari server.
-- ===========================================================================
