-- =========================================================
--  SIMDATADIK - Core Seed Data
--  File  : sql/seed_core.sql
--  Descr: Data awal (roles, permissions, role_permissions,
--         content_categories) siap pakai
--  NOTE : Jalankan setelah schema_core.sql
--         Untuk hosting ini gunakan database: edigital_simdatadik
-- =========================================================

USE `edigital_simdatadik`;

-- Matikan dulu pemeriksaan FK agar penghapusan berantai aman
SET FOREIGN_KEY_CHECKS = 0;

-- Bersihkan data lama (agar seed bisa di-run ulang dengan aman)
-- Urutan: child dulu baru parent
DELETE FROM role_permissions;
DELETE FROM permissions;
DELETE FROM user_school_roles;
DELETE FROM user_roles;
DELETE FROM roles;
DELETE FROM content_post_files;
DELETE FROM content_posts;
DELETE FROM content_categories;

SET FOREIGN_KEY_CHECKS = 1;

-- =========================================================
-- 1. ROLES (Peran Pengguna Sistem)
-- =========================================================
INSERT INTO roles (name, slug, scope, description, is_active, created_at, updated_at) VALUES
('Admin Pusat',        'admin_pusat',        'global', 'Mengelola pengaturan global sistem dan semua sekolah.', 1, NOW(), NOW()),
('Admin Sekolah',      'admin_sekolah',      'school', 'Mengelola data dan pengaturan di tingkat sekolah.',    1, NOW(), NOW()),
('Guru',               'guru',               'school', 'Mengelola kelas, materi, tugas, ujian, dan nilai.',     1, NOW(), NOW()),
('Tenaga Kependidikan','tenaga_kependidikan','school', 'Mendukung administrasi (TU, PPDB, keuangan, dll).',     1, NOW(), NOW()),
('Siswa',              'siswa',              'school', 'Mengikuti pembelajaran, ujian, dan melihat nilai.',     1, NOW(), NOW()),
('Pustakawan',         'pustakawan',         'school', 'Mengelola perpustakaan sekolah.',                       1, NOW(), NOW()),
('Laboran',            'laboran',            'school', 'Mengelola laboratorium dan praktikum.',                 1, NOW(), NOW());

-- =========================================================
-- 2. PERMISSIONS (Hak Akses Granular)
--    Pola: module + slug = "module.action"
-- =========================================================
INSERT INTO permissions (name, slug, module, description, is_active, created_at, updated_at) VALUES
-- Modul: System
('Akses Panel Admin',                  'system.access_admin_panel',  'system', 'Mengakses dashboard admin pusat / admin sekolah.', 1, NOW(), NOW()),
('Kelola Pengaturan Sistem',          'system.settings.manage',     'system', 'Mengubah konfigurasi global aplikasi.',             1, NOW(), NOW()),
('Lihat Log Aktivitas',               'system.logs.view',           'system', 'Melihat riwayat aktivitas pengguna.',               1, NOW(), NOW()),

-- Modul: Sekolah
('Lihat Data Sekolah',                'schools.view_any',           'schools', 'Melihat daftar sekolah di sistem.',                1, NOW(), NOW()),
('Buat / Daftarkan Sekolah',          'schools.create',             'schools', 'Mendaftarkan sekolah baru ke sistem.',            1, NOW(), NOW()),
('Ubah Data Sekolah',                 'schools.update',             'schools', 'Mengedit profil sekolah.',                        1, NOW(), NOW()),
('Approve Pendaftaran Sekolah',       'schools.approve_registration','schools','Menyetujui/menolak pendaftaran sekolah baru.',    1, NOW(), NOW()),
('Hapus Sekolah',                     'schools.delete',             'schools', 'Menonaktifkan/menghapus sekolah dari sistem.',    1, NOW(), NOW()),

-- Modul: Users & Roles
('Lihat Data Pengguna',               'users.view_any',             'users',   'Melihat daftar pengguna.',                         1, NOW(), NOW()),
('Tambah Pengguna',                   'users.create',               'users',   'Menambahkan akun pengguna baru.',                  1, NOW(), NOW()),
('Ubah Data Pengguna',                'users.update',               'users',   'Mengedit profil dan status pengguna.',            1, NOW(), NOW()),
('Hapus Pengguna',                    'users.delete',               'users',   'Menghapus / menonaktifkan pengguna.',             1, NOW(), NOW()),

('Lihat Role & Permission',           'roles.view_any',             'roles',   'Melihat daftar role dan permission.',             1, NOW(), NOW()),
('Atur Role Pengguna',                'roles.assign',               'roles',   'Mengatur role yang dimiliki pengguna.',           1, NOW(), NOW()),
('Kelola Role & Permission',          'roles.manage_permissions',   'roles',   'Membuat/mengubah role dan permission.',           1, NOW(), NOW()),

-- Modul: Academic / Core SIS
('Lihat Master Data Akademik',        'academic.master.view',       'academic','Melihat tahun ajaran, rombel, mapel, dsb.',       1, NOW(), NOW()),
('Kelola Master Data Akademik',       'academic.master.manage',     'academic','Mengelola tahun ajaran, rombel, mapel, dsb.',     1, NOW(), NOW()),
('Lihat Jadwal Pelajaran',            'academic.schedule.view',     'academic','Melihat jadwal pelajaran dan kalender.',          1, NOW(), NOW()),
('Kelola Jadwal Pelajaran',           'academic.schedule.manage',   'academic','Mengatur jadwal pelajaran.',                       1, NOW(), NOW()),
('Lihat Data Penempatan Siswa',       'academic.enrollment.view',   'academic','Melihat data buku induk dan rombel siswa.',       1, NOW(), NOW()),
('Kelola Data Penempatan Siswa',      'academic.enrollment.manage', 'academic','Mengelola penempatan siswa ke rombel.',           1, NOW(), NOW()),

-- Modul: LMS / e-Learning
('Lihat Kelas Online',                'lms.courses.view',           'lms',     'Melihat daftar kelas online dan materi.',         1, NOW(), NOW()),
('Kelola Kelas Online',               'lms.courses.manage',         'lms',     'Membuat dan mengatur kelas online.',              1, NOW(), NOW()),
('Kelola Materi Pembelajaran',        'lms.materials.manage',       'lms',     'Mengelola materi ajar (teks, file, video, link).',1, NOW(), NOW()),
('Kelola Tugas / Penilaian',          'lms.assignments.manage',     'lms',     'Membuat dan mengelola tugas.',                    1, NOW(), NOW()),
('Input / Koreksi Nilai Tugas',       'lms.assignments.grade',      'lms',     'Memberi nilai/umpan balik tugas.',                1, NOW(), NOW()),

-- Modul: Exam / e-Ujian
('Kelola Bank Soal',                  'exam.bank.manage',           'exam',    'Membuat dan mengatur bank soal.',                 1, NOW(), NOW()),
('Kelola Jadwal Ujian',               'exam.exams.manage',          'exam',    'Menjadwalkan dan mengelola ujian.',               1, NOW(), NOW()),
('Lihat Hasil Ujian',                 'exam.results.view',          'exam',    'Melihat rekap nilai ujian.',                      1, NOW(), NOW()),
('Ikut Ujian Online',                 'exam.participate',           'exam',    'Mengikuti ujian yang dijadwalkan.',               1, NOW(), NOW()),

-- Modul: PPDB
('Kelola Periode PPDB',               'ppdb.manage',                'ppdb',    'Mengelola periode penerimaan peserta didik baru.',1, NOW(), NOW()),
('Verifikasi Berkas Pendaftar',       'ppdb.applicants.verify',     'ppdb',    'Memverifikasi berkas pendaftar.',                 1, NOW(), NOW()),
('Publikasi Hasil Seleksi PPDB',      'ppdb.results.publish',       'ppdb',    'Menerbitkan hasil seleksi PPDB.',                 1, NOW(), NOW()),

-- Modul: Perpustakaan
('Kelola Katalog Perpustakaan',       'library.catalog.manage',     'library', 'Mengelola data buku dan koleksi perpustakaan.',   1, NOW(), NOW()),
('Kelola Peminjaman Buku',            'library.loans.manage',       'library', 'Mengelola peminjaman dan pengembalian.',         1, NOW(), NOW()),
('Lihat Laporan Perpustakaan',        'library.reports.view',       'library', 'Melihat statistik perpustakaan.',                 1, NOW(), NOW()),

-- Modul: Laboratorium
('Kelola Ruang Lab',                  'lab.rooms.manage',           'lab',     'Mengelola data ruang laboratorium.',             1, NOW(), NOW()),
('Kelola Alat & Bahan Lab',           'lab.assets.manage',          'lab',     'Mengelola inventaris alat dan bahan.',           1, NOW(), NOW()),
('Kelola Jadwal Lab',                 'lab.schedule.manage',        'lab',     'Mengelola jadwal penggunaan lab.',               1, NOW(), NOW()),
('Kelola Praktikum',                  'lab.practicum.manage',       'lab',     'Mencatat kegiatan praktikum dan peserta.',       1, NOW(), NOW()),

-- Modul: Konten Publik
('Lihat Konten Publik',               'content.view_public',        'content', 'Melihat artikel/materi/event yang dipublikasikan.',1, NOW(), NOW()),
('Buat Konten',                       'content.create',             'content', 'Membuat artikel, materi, soal, atau event.',      1, NOW(), NOW()),
('Moderasi Konten',                   'content.moderate',           'content', 'Menyetujui/menolak konten sebelum dipublikasikan.',1, NOW(), NOW()),

-- Modul: Laporan / Analitik
('Lihat Laporan Sekolah',             'reports.school.view',        'reports', 'Melihat laporan agregat level sekolah.',          1, NOW(), NOW()),
('Lihat Laporan Guru',                'reports.teacher.view',       'reports', 'Melihat laporan kinerja atau nilai per guru.',    1, NOW(), NOW()),
('Lihat Laporan Siswa (Milik Sendiri)','reports.student.view_own',  'reports', 'Siswa melihat nilai dan progres miliknya.',      1, NOW(), NOW());

-- =========================================================
-- 3. ROLE_PERMISSIONS (Mapping Role ↔ Permission)
-- =========================================================

-- 3.1 Admin Pusat: akses penuh semua permission
INSERT INTO role_permissions (role_id, permission_id, created_at, updated_at)
SELECT r.id, p.id, NOW(), NOW()
FROM roles r
JOIN permissions p ON 1=1
WHERE r.slug = 'admin_pusat';

-- 3.2 Admin Sekolah: hampir semua, kecuali pengaturan sistem global & approval sekolah baru
INSERT INTO role_permissions (role_id, permission_id, created_at, updated_at)
SELECT r.id, p.id, NOW(), NOW()
FROM roles r
JOIN permissions p ON 1=1
WHERE r.slug = 'admin_sekolah'
  AND p.slug NOT LIKE 'system.%'
  AND p.slug <> 'schools.approve_registration';

-- 3.3 Guru: fokus ke LMS, ujian, konten, laporan guru
INSERT INTO role_permissions (role_id, permission_id, created_at, updated_at)
SELECT r.id, p.id, NOW(), NOW()
FROM roles r
JOIN permissions p ON p.slug IN (
    'system.access_admin_panel',
    'academic.master.view',
    'academic.schedule.view',
    'academic.enrollment.view',
    'lms.courses.view',
    'lms.courses.manage',
    'lms.materials.manage',
    'lms.assignments.manage',
    'lms.assignments.grade',
    'exam.bank.manage',
    'exam.exams.manage',
    'exam.results.view',
    'content.view_public',
    'content.create',
    'reports.teacher.view'
)
WHERE r.slug = 'guru';

-- 3.4 Tenaga Kependidikan: PPDB, perpustakaan, sebagian akademik/laporan
INSERT INTO role_permissions (role_id, permission_id, created_at, updated_at)
SELECT r.id, p.id, NOW(), NOW()
FROM roles r
JOIN permissions p ON p.slug IN (
    'system.access_admin_panel',
    'academic.master.view',
    'academic.enrollment.view',
    'ppdb.manage',
    'ppdb.applicants.verify',
    'ppdb.results.publish',
    'library.catalog.manage',
    'library.loans.manage',
    'library.reports.view',
    'reports.school.view'
)
WHERE r.slug = 'tenaga_kependidikan';

-- 3.5 Pustakawan: full akses modul perpustakaan + lihat laporan
INSERT INTO role_permissions (role_id, permission_id, created_at, updated_at)
SELECT r.id, p.id, NOW(), NOW()
FROM roles r
JOIN permissions p ON p.slug IN (
    'system.access_admin_panel',
    'library.catalog.manage',
    'library.loans.manage',
    'library.reports.view'
)
WHERE r.slug = 'pustakawan';

-- 3.6 Laboran: akses modul laboratorium
INSERT INTO role_permissions (role_id, permission_id, created_at, updated_at)
SELECT r.id, p.id, NOW(), NOW()
FROM roles r
JOIN permissions p ON p.slug IN (
    'system.access_admin_panel',
    'lab.rooms.manage',
    'lab.assets.manage',
    'lab.schedule.manage',
    'lab.practicum.manage'
)
WHERE r.slug = 'laboran';

-- 3.7 Siswa: akses terbatas untuk pembelajaran, ujian, dan lihat nilai sendiri
INSERT INTO role_permissions (role_id, permission_id, created_at, updated_at)
SELECT r.id, p.id, NOW(), NOW()
FROM roles r
JOIN permissions p ON p.slug IN (
    'lms.courses.view',
    'exam.participate',
    'content.view_public',
    'reports.student.view_own'
)
WHERE r.slug = 'siswa';

-- =========================================================
-- 4. KATEGORI KONTEN (Untuk halaman publik & sharing)
-- =========================================================
INSERT INTO content_categories (slug, name, description, is_active, created_at) VALUES
('artikel',     'Artikel Edukasi',        'Artikel umum tentang pendidikan, tips belajar, dan informasi penting.', 1, NOW()),
('materi',      'Materi Belajar',         'Materi pembelajaran yang dibagikan guru atau sekolah.',                 1, NOW()),
('soal',        'Bank Soal Sharing',      'Kumpulan soal latihan, ujian, atau tryout.',                            1, NOW()),
('event',       'Event Pendidikan',       'Kegiatan seminar, webinar, workshop, atau kegiatan pendidikan lainnya.',1, NOW()),
('lomba',       'Lomba & Kompetisi',      'Informasi lomba dan kompetisi akademik maupun non-akademik.',           1, NOW()),
('pengumuman',  'Pengumuman',             'Pengumuman resmi dari sekolah atau admin.',                             1, NOW());

-- =========================================================
-- 5. (OPSIONAL) Contoh Konten Awal - bisa ditambah nanti di modul konten
--    Saat ini tidak diisi untuk menjaga seed tetap generic.
-- =========================================================

-- Selesai
-- =========================================================
