-- =====================================================================
-- SIMAP — Dua sesi belajar: pagi dan siang
--
--   mysql -u root -p simap_db < database/18_sesi_belajar.sql
--
-- Semula jam masuk berlaku satu untuk seluruh sekolah. Di sekolah yang
-- kelasnya dibagi dua sesi, itu berarti siswa sesi siang selalu tercatat
-- terlambat lima jam — dan tidak ada cara memperbaikinya selain mematikan
-- penandaan terlambat sama sekali.
--
-- Sesi disimpan sebagai data, bukan pengaturan tunggal, supaya sekolah
-- dapat menambah sesi ketiga bila suatu saat diperlukan tanpa mengubah kode.
-- =====================================================================

SET NAMES utf8mb4;

CREATE TABLE IF NOT EXISTS sesi_belajar (
  id           TINYINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  kode         VARCHAR(20) NOT NULL UNIQUE,
  nama         VARCHAR(60) NOT NULL,
  jam_masuk    TIME NOT NULL,
  -- Batas terlambat dipisah dari jam masuk: sekolah biasanya memberi
  -- kelonggaran beberapa menit sebelum benar-benar dihitung terlambat
  batas_telat  TIME NOT NULL,
  jam_pulang   TIME NOT NULL,
  -- Tap sebelum jam ini diabaikan, supaya siswa yang datang jauh lebih awal
  -- atau iseng menempel kartu sore hari tidak tercatat masuk
  buka_absen   TIME NOT NULL DEFAULT '05:30:00',
  tutup_absen  TIME NOT NULL DEFAULT '17:00:00',
  urutan       TINYINT NOT NULL DEFAULT 1,
  is_aktif     TINYINT(1) NOT NULL DEFAULT 1
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

INSERT IGNORE INTO sesi_belajar
 (id, kode, nama, jam_masuk, batas_telat, jam_pulang, buka_absen, tutup_absen, urutan) VALUES
 (1, 'PAGI',  'Sesi Pagi',  '07:00:00', '07:15:00', '12:00:00', '05:30:00', '13:00:00', 1),
 (2, 'SIANG', 'Sesi Siang', '12:30:00', '12:45:00', '17:00:00', '11:30:00', '18:00:00', 2);

-- Kelas menentukan sesinya. Siswa mengikuti kelasnya, sehingga pindah kelas
-- otomatis berarti pindah sesi tanpa perlu disunting satu per satu.
ALTER TABLE kelas
  ADD COLUMN IF NOT EXISTS sesi_id TINYINT UNSIGNED NOT NULL DEFAULT 1 AFTER ruang;

ALTER TABLE absensi_siswa
  ADD COLUMN IF NOT EXISTS sesi_id TINYINT UNSIGNED NULL AFTER kelas_id;

SELECT 'sesi belajar siap' AS info,
       (SELECT COUNT(*) FROM sesi_belajar) AS sesi,
       (SELECT COUNT(*) FROM kelas WHERE sesi_id = 1) AS kelas_pagi,
       (SELECT COUNT(*) FROM kelas WHERE sesi_id = 2) AS kelas_siang;

-- Pemberitahuan pembaruan aplikasi
INSERT IGNORE INTO setting (skey, svalue, tipe, grup, label) VALUES
 ('app_versi_ortu',  '1.0.0', 'text',    'sekolah', 'Versi terbaru aplikasi wali murid'),
 ('app_link_ortu',   '',      'text',    'sekolah', 'Tautan unduh aplikasi wali murid (Google Drive)'),
 ('app_wajib_ortu',  '0',     'boolean', 'sekolah', 'Wajibkan pembaruan sebelum aplikasi dipakai'),
 ('app_catatan_ortu','',      'text',    'sekolah', 'Catatan pembaruan yang ditampilkan di aplikasi');
