-- =====================================================================
-- SIMAP — Integrasi penuh mesin RFID
--
--   mysql -u root -p simap_db < database/14_integrasi_rfid.sql
--
-- Sebelumnya sekolah hanya tahu sebuah mesin "pernah terlihat" pada jam
-- tertentu. Bila kartu tiba-tiba tidak terbaca, tidak ada cara mengetahui
-- apakah pembacanya lepas, sinyalnya lemah, atau memang tidak ada yang tap.
--
-- Kolom di bawah membuat keadaan mesin terbaca dari layar: pembaca apa yang
-- terpasang, kuat sinyalnya, berapa tap tertahan di antrean, dan sudah
-- berapa lama menyala.
-- =====================================================================

SET NAMES utf8mb4;

ALTER TABLE rfid_device
  ADD COLUMN IF NOT EXISTS punya_rdm6300 TINYINT(1) NULL
      COMMENT 'dilaporkan mesin saat ping' AFTER firmware,
  ADD COLUMN IF NOT EXISTS punya_rc522   TINYINT(1) NULL AFTER punya_rdm6300,
  ADD COLUMN IF NOT EXISTS rssi          SMALLINT NULL
      COMMENT 'kuat sinyal WiFi dBm' AFTER punya_rc522,
  ADD COLUMN IF NOT EXISTS antrean       SMALLINT NULL
      COMMENT 'tap tertahan di mesin' AFTER rssi,
  ADD COLUMN IF NOT EXISTS uptime_detik  INT UNSIGNED NULL AFTER antrean,
  ADD COLUMN IF NOT EXISTS tap_hari_ini  SMALLINT NOT NULL DEFAULT 0 AFTER uptime_detik,
  ADD COLUMN IF NOT EXISTS tanggal_tap   DATE NULL AFTER tap_hari_ini;

-- Jenis kartu dicatat supaya sekolah tahu kartu mana memerlukan pembaca yang
-- mana. Tanpa ini, kartu Mifare yang didaftarkan pada gerbang ber-RDM6300
-- saja akan tampak "tidak terbaca" tanpa sebab yang jelas.
ALTER TABLE rfid_kartu
  ADD COLUMN IF NOT EXISTS jenis ENUM('EM4100','MIFARE','LAIN') NOT NULL DEFAULT 'EM4100'
      COMMENT 'EM4100 125 kHz, MIFARE 13,56 MHz' AFTER uid,
  ADD COLUMN IF NOT EXISTS terakhir_dipakai DATETIME NULL AFTER status;

-- UID sepenuhnya angka dan sepuluh digit adalah ciri EM4100; sisanya heks
UPDATE rfid_kartu
   SET jenis = CASE WHEN uid REGEXP '^[0-9]{10}$' THEN 'EM4100' ELSE 'MIFARE' END
 WHERE jenis = 'EM4100';

ALTER TABLE rfid_log
  ADD COLUMN IF NOT EXISTS jenis_kartu ENUM('EM4100','MIFARE','LAIN') NULL AFTER uid,
  ADD COLUMN IF NOT EXISTS pembaca VARCHAR(20) NULL
      COMMENT 'RDM6300 atau RC522, dilaporkan mesin' AFTER jenis_kartu;

INSERT IGNORE INTO setting (skey, svalue, tipe, grup, label) VALUES
 ('rfid_batas_offline', '10', 'number', 'absensi',
  'Menit tanpa kabar sebelum mesin dianggap mati');

SELECT 'integrasi RFID siap' AS info,
       (SELECT COUNT(*) FROM rfid_device) AS mesin,
       (SELECT COUNT(*) FROM rfid_kartu) AS kartu;
