CREATE DATABASE IF NOT EXISTS sipantas_webgis
  CHARACTER SET utf8mb4
  COLLATE utf8mb4_unicode_ci;

USE sipantas_webgis;

DROP TABLE IF EXISTS pemberdayaan;
DROP TABLE IF EXISTS laporan_musibah;
DROP TABLE IF EXISTS keluarga_anggota;
DROP TABLE IF EXISTS riwayat_bantuan;
DROP TABLE IF EXISTS keluarga;
DROP TABLE IF EXISTS users;
DROP TABLE IF EXISTS rumah_ibadah;

CREATE TABLE rumah_ibadah (
  id INT AUTO_INCREMENT PRIMARY KEY,
  nama VARCHAR(150) NOT NULL,
  alamat TEXT NOT NULL,
  kategori ENUM('Masjid','Gereja','Vihara','Klenteng','Pura','Lainnya') NOT NULL DEFAULT 'Masjid',
  pengurus VARCHAR(120) NULL,
  kontak VARCHAR(50) NULL,
  dana_sosial DECIMAL(15,2) NOT NULL DEFAULT 0,
  kuota INT NOT NULL DEFAULT 0,
  radius INT NOT NULL DEFAULT 500,
  lat DECIMAL(10,7) NOT NULL,
  lng DECIMAL(10,7) NOT NULL,
  status ENUM('Aktif','Nonaktif') NOT NULL DEFAULT 'Aktif',
  created_by INT NULL,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB;

CREATE TABLE users (
  id INT AUTO_INCREMENT PRIMARY KEY,
  nama VARCHAR(120) NOT NULL,
  email VARCHAR(120) NOT NULL UNIQUE,
  password_hash VARCHAR(255) NOT NULL,
  role ENUM('admin','dinas','rumah_ibadah','relawan','masyarakat') NOT NULL,
  rumah_ibadah_id INT NULL,
  status_akun ENUM('Menunggu Verifikasi','Aktif','Ditolak') NOT NULL DEFAULT 'Aktif',
  kontak VARCHAR(50) NULL,
  alamat TEXT NULL,
  nama_instansi VARCHAR(160) NULL,
  kategori_instansi VARCHAR(50) NULL,
  catatan_pengajuan TEXT NULL,
  lat DECIMAL(10,7) NULL,
  lng DECIMAL(10,7) NULL,
  verified_by INT NULL,
  verified_at DATETIME NULL,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  CONSTRAINT fk_users_rumah_ibadah FOREIGN KEY (rumah_ibadah_id) REFERENCES rumah_ibadah(id)
    ON DELETE SET NULL,
  CONSTRAINT fk_users_verified_by FOREIGN KEY (verified_by) REFERENCES users(id)
    ON DELETE SET NULL
) ENGINE=InnoDB;

CREATE TABLE keluarga (
  id INT AUTO_INCREMENT PRIMARY KEY,
  nama_kk VARCHAR(150) NOT NULL,
  alamat TEXT NOT NULL,
  no_kk VARCHAR(32) NULL,
  nik VARCHAR(32) NULL,
  kerentanan ENUM('Miskin Ekstrem','Sangat Miskin','Miskin','Rentan Miskin') NOT NULL DEFAULT 'Miskin',
  kebutuhan ENUM('Sembako','Biaya Pendidikan','Kesehatan','Tempat Tinggal','Modal Usaha','Lainnya') NOT NULL DEFAULT 'Sembako',
  status_verifikasi ENUM('Menunggu Verifikasi','Valid','Tidak Valid','Perlu Survei Ulang') NOT NULL DEFAULT 'Menunggu Verifikasi',
  status_bantuan ENUM('Menunggu Verifikasi','Ditanggung','Blank Spot','Bantuan Pemerintah','Butuh Bantuan Lanjutan','Tidak Valid') NOT NULL DEFAULT 'Menunggu Verifikasi',
  rumah_ibadah_id INT NULL,
  catatan TEXT NULL,
  lat DECIMAL(10,7) NOT NULL,
  lng DECIMAL(10,7) NOT NULL,
  created_by INT NULL,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  CONSTRAINT fk_keluarga_rumah_ibadah FOREIGN KEY (rumah_ibadah_id) REFERENCES rumah_ibadah(id)
    ON DELETE SET NULL,
  CONSTRAINT fk_keluarga_user FOREIGN KEY (created_by) REFERENCES users(id)
    ON DELETE SET NULL
) ENGINE=InnoDB;

CREATE TABLE riwayat_bantuan (
  id INT AUTO_INCREMENT PRIMARY KEY,
  keluarga_id INT NOT NULL,
  rumah_ibadah_id INT NULL,
  tanggal_bantuan DATE NOT NULL,
  jenis_bantuan VARCHAR(120) NOT NULL,
  nilai_bantuan DECIMAL(15,2) NOT NULL DEFAULT 0,
  catatan TEXT NULL,
  created_by INT NULL,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  CONSTRAINT fk_bantuan_keluarga FOREIGN KEY (keluarga_id) REFERENCES keluarga(id)
    ON DELETE CASCADE,
  CONSTRAINT fk_bantuan_rumah_ibadah FOREIGN KEY (rumah_ibadah_id) REFERENCES rumah_ibadah(id)
    ON DELETE SET NULL,
  CONSTRAINT fk_bantuan_user FOREIGN KEY (created_by) REFERENCES users(id)
    ON DELETE SET NULL
) ENGINE=InnoDB;


CREATE TABLE keluarga_anggota (
  id INT AUTO_INCREMENT PRIMARY KEY,
  keluarga_id INT NOT NULL,
  nik VARCHAR(32) NULL,
  nama VARCHAR(150) NOT NULL,
  hubungan ENUM('Kepala Keluarga','Istri','Suami','Anak','Orang Tua','Mertua','Famili Lain','Lainnya') NOT NULL DEFAULT 'Lainnya',
  jenis_kelamin ENUM('Laki-laki','Perempuan') NOT NULL DEFAULT 'Laki-laki',
  tempat_lahir VARCHAR(100) NULL,
  tanggal_lahir DATE NULL,
  agama VARCHAR(50) NULL,
  pendidikan VARCHAR(80) NULL,
  pekerjaan VARCHAR(120) NULL,
  status_perkawinan VARCHAR(80) NULL,
  penghasilan DECIMAL(15,2) NOT NULL DEFAULT 0,
  mampu_bekerja ENUM('Ya','Tidak') NOT NULL DEFAULT 'Tidak',
  keahlian TEXT NULL,
  status_pemberdayaan ENUM('Belum Dinilai','Layak Diberdayakan','Dalam Program','Mandiri','Tidak Layak') NOT NULL DEFAULT 'Belum Dinilai',
  catatan TEXT NULL,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  CONSTRAINT fk_anggota_keluarga FOREIGN KEY (keluarga_id) REFERENCES keluarga(id)
    ON DELETE CASCADE
) ENGINE=InnoDB;

CREATE TABLE laporan_musibah (
  id INT AUTO_INCREMENT PRIMARY KEY,
  keluarga_id INT NULL,
  pelapor_id INT NULL,
  jenis_musibah ENUM('Kebakaran','Banjir','Sakit Mendesak','Kehilangan Pekerjaan','Kematian Tulang Punggung Keluarga','Rumah Rusak','Lainnya') NOT NULL DEFAULT 'Lainnya',
  tingkat_urgensi ENUM('Rendah','Sedang','Tinggi','Darurat') NOT NULL DEFAULT 'Sedang',
  tanggal_kejadian DATE NOT NULL,
  alamat TEXT NOT NULL,
  lat DECIMAL(10,7) NOT NULL,
  lng DECIMAL(10,7) NOT NULL,
  deskripsi TEXT NOT NULL,
  kebutuhan_mendesak TEXT NULL,
  status ENUM('Baru','Diverifikasi','Diproses','Ditindaklanjuti','Selesai','Ditolak') NOT NULL DEFAULT 'Baru',
  tindak_lanjut TEXT NULL,
  handled_by INT NULL,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  CONSTRAINT fk_musibah_keluarga FOREIGN KEY (keluarga_id) REFERENCES keluarga(id)
    ON DELETE SET NULL,
  CONSTRAINT fk_musibah_pelapor FOREIGN KEY (pelapor_id) REFERENCES users(id)
    ON DELETE SET NULL,
  CONSTRAINT fk_musibah_handler FOREIGN KEY (handled_by) REFERENCES users(id)
    ON DELETE SET NULL
) ENGINE=InnoDB;

CREATE TABLE pemberdayaan (
  id INT AUTO_INCREMENT PRIMARY KEY,
  anggota_id INT NOT NULL,
  keluarga_id INT NOT NULL,
  jenis_program ENUM('Pelatihan Kerja','Modal Usaha','Pendampingan UMKM','Penempatan Kerja','Bantuan Alat Kerja','Lainnya') NOT NULL DEFAULT 'Pelatihan Kerja',
  nama_program VARCHAR(160) NOT NULL,
  penyelenggara VARCHAR(160) NULL,
  tanggal_mulai DATE NULL,
  status ENUM('Direkomendasikan','Berjalan','Selesai','Batal','Mandiri') NOT NULL DEFAULT 'Direkomendasikan',
  catatan TEXT NULL,
  created_by INT NULL,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  CONSTRAINT fk_pemberdayaan_anggota FOREIGN KEY (anggota_id) REFERENCES keluarga_anggota(id)
    ON DELETE CASCADE,
  CONSTRAINT fk_pemberdayaan_keluarga FOREIGN KEY (keluarga_id) REFERENCES keluarga(id)
    ON DELETE CASCADE,
  CONSTRAINT fk_pemberdayaan_user FOREIGN KEY (created_by) REFERENCES users(id)
    ON DELETE SET NULL
) ENGINE=InnoDB;

INSERT INTO rumah_ibadah
(nama, alamat, kategori, pengurus, kontak, dana_sosial, kuota, radius, lat, lng, status)
VALUES
('Masjid Al-Ikhlas', 'Pontianak Kota, Kalimantan Barat', 'Masjid', 'Bapak Rahman', '081234567890', 6000000, 4, 900, -0.0265000, 109.3427000, 'Aktif'),
('Gereja Kasih Damai', 'Pontianak Barat, Kalimantan Barat', 'Gereja', 'Ibu Maria', '081298765432', 4500000, 3, 700, -0.0345000, 109.3315000, 'Aktif'),
('Vihara Metta', 'Pontianak Selatan, Kalimantan Barat', 'Vihara', 'Bapak Steven', '081212121212', 3500000, 2, 600, -0.0455000, 109.3475000, 'Aktif');

-- Password awal semua akun: 123456
-- Hash menggunakan SHA2 untuk memudahkan import data awal.
INSERT INTO users (nama, email, password_hash, role, rumah_ibadah_id, status_akun) VALUES
('Administrator SIPANTAS', 'admin@sipantas.local', SHA2('123456', 256), 'admin', NULL, 'Aktif'),
('Petugas Dinas Sosial', 'dinsos@sipantas.local', SHA2('123456', 256), 'dinas', NULL, 'Aktif'),
('Pengurus Masjid Al-Ikhlas', 'masjid@sipantas.local', SHA2('123456', 256), 'rumah_ibadah', 1, 'Aktif'),
('Relawan Lapangan', 'relawan@sipantas.local', SHA2('123456', 256), 'relawan', NULL, 'Aktif'),
('Warga Masyarakat', 'warga@sipantas.local', SHA2('123456', 256), 'masyarakat', NULL, 'Aktif');

INSERT INTO keluarga
(nama_kk, alamat, no_kk, nik, kerentanan, kebutuhan, status_verifikasi, status_bantuan, lat, lng, catatan)
VALUES
('Keluarga Bapak Ahmad', 'Gang Sejahtera, Pontianak', '6171xxxxxxxx0001', '6171xxxxxxxx0001', 'Miskin Ekstrem', 'Sembako', 'Valid', 'Menunggu Verifikasi', -0.0282000, 109.3441000, 'Data awal keluarga miskin ekstrem.'),
('Keluarga Ibu Siti', 'Jalan Kom Yos Sudarso, Pontianak', '6171xxxxxxxx0002', '6171xxxxxxxx0002', 'Sangat Miskin', 'Biaya Pendidikan', 'Valid', 'Menunggu Verifikasi', -0.0362000, 109.3298000, 'Membutuhkan bantuan biaya sekolah.'),
('Keluarga Bapak Joni', 'Pontianak Barat, Kalimantan Barat', '6171xxxxxxxx0003', '6171xxxxxxxx0003', 'Miskin', 'Kesehatan', 'Valid', 'Menunggu Verifikasi', -0.0478000, 109.3575000, 'Jarak cukup jauh dari rumah ibadah aktif.'),
('Keluarga Ibu Rina', 'Pontianak Selatan, Kalimantan Barat', '6171xxxxxxxx0004', '6171xxxxxxxx0004', 'Rentan Miskin', 'Modal Usaha', 'Menunggu Verifikasi', 'Menunggu Verifikasi', -0.0462000, 109.3459000, 'Usulan masyarakat, belum diverifikasi.');

INSERT INTO keluarga_anggota
(keluarga_id, nik, nama, hubungan, jenis_kelamin, tempat_lahir, tanggal_lahir, agama, pendidikan, pekerjaan, status_perkawinan, penghasilan, mampu_bekerja, keahlian, status_pemberdayaan, catatan)
VALUES
(1, '6171xxxxxxxx1001', 'Ahmad', 'Kepala Keluarga', 'Laki-laki', 'Pontianak', '1982-02-12', 'Islam', 'SMA', 'Buruh Harian', 'Kawin', 900000, 'Ya', 'Bangunan, angkut barang', 'Layak Diberdayakan', 'Perlu peluang kerja lebih stabil.'),
(1, '6171xxxxxxxx1002', 'Aminah', 'Istri', 'Perempuan', 'Pontianak', '1985-07-04', 'Islam', 'SMP', 'Ibu Rumah Tangga', 'Kawin', 0, 'Ya', 'Memasak, membuat kue', 'Layak Diberdayakan', 'Potensial untuk usaha makanan rumahan.'),
(1, '6171xxxxxxxx1003', 'Dani', 'Anak', 'Laki-laki', 'Pontianak', '2012-09-15', 'Islam', 'SD', 'Pelajar', 'Belum Kawin', 0, 'Tidak', '', 'Belum Dinilai', ''),
(2, '6171xxxxxxxx2001', 'Siti', 'Kepala Keluarga', 'Perempuan', 'Pontianak', '1988-03-21', 'Islam', 'SMA', 'Penjual Kecil', 'Cerai Hidup', 700000, 'Ya', 'Berjualan, memasak', 'Layak Diberdayakan', 'Butuh modal usaha kecil.'),
(2, '6171xxxxxxxx2002', 'Rafa', 'Anak', 'Laki-laki', 'Pontianak', '2010-01-10', 'Islam', 'SMP', 'Pelajar', 'Belum Kawin', 0, 'Tidak', '', 'Belum Dinilai', ''),
(3, '6171xxxxxxxx3001', 'Joni', 'Kepala Keluarga', 'Laki-laki', 'Pontianak', '1979-12-05', 'Islam', 'SD', 'Tidak Tetap', 'Kawin', 500000, 'Ya', 'Berkebun, memperbaiki barang sederhana', 'Layak Diberdayakan', 'Perlu pemeriksaan kesehatan sebelum program kerja berat.'),
(4, '6171xxxxxxxx4001', 'Rina', 'Kepala Keluarga', 'Perempuan', 'Pontianak', '1990-11-09', 'Islam', 'SMA', 'Tidak Bekerja', 'Kawin', 0, 'Ya', 'Menjahit dasar', 'Belum Dinilai', 'Usulan baru, perlu verifikasi.');

INSERT INTO laporan_musibah
(keluarga_id, pelapor_id, jenis_musibah, tingkat_urgensi, tanggal_kejadian, alamat, lat, lng, deskripsi, kebutuhan_mendesak, status)
VALUES
(3, 4, 'Sakit Mendesak', 'Tinggi', CURDATE(), 'Pontianak Barat, Kalimantan Barat', -0.0478000, 109.3575000, 'Kepala keluarga membutuhkan bantuan pemeriksaan kesehatan.', 'Transportasi ke fasilitas kesehatan dan bantuan biaya awal.', 'Baru');

INSERT INTO pemberdayaan
(anggota_id, keluarga_id, jenis_program, nama_program, penyelenggara, tanggal_mulai, status, catatan, created_by)
VALUES
(1, 1, 'Pelatihan Kerja', 'Pelatihan kerja dasar dan penyaluran harian', 'Dinas Sosial', CURDATE(), 'Direkomendasikan', 'Anggota masih produktif dan mampu bekerja.', 2);

