-- ============================================================
--  database.sql — WebGIS Poverty Mapping v2
--  Tiara Chontesa — D0141231070
-- ============================================================

CREATE DATABASE IF NOT EXISTS db_bantuan
  CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE db_bantuan;

-- ────────────────────────────────────────
-- USERS (3 role: admin, relawan, pengurus, pemerintah)
-- ────────────────────────────────────────
CREATE TABLE IF NOT EXISTS users (
    id            INT AUTO_INCREMENT PRIMARY KEY,
    nama_lengkap  VARCHAR(150)  NOT NULL,
    username      VARCHAR(80)   NOT NULL UNIQUE,
    email         VARCHAR(150)  NOT NULL UNIQUE,
    password      VARCHAR(255)  NOT NULL,
    role          ENUM('admin','relawan','pengurus','pemerintah') NOT NULL DEFAULT 'relawan',
    foto          VARCHAR(255)  DEFAULT NULL,
    aktif         TINYINT(1)    NOT NULL DEFAULT 1,
    created_at    TIMESTAMP     DEFAULT CURRENT_TIMESTAMP,
    last_login    TIMESTAMP     NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Seed: admin default (password: admin123)
INSERT INTO users (nama_lengkap, username, email, password, role) VALUES
('Administrator', 'admin', 'admin@webgis.id', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 'admin');

-- ────────────────────────────────────────
-- RUMAH IBADAH
-- ────────────────────────────────────────
CREATE TABLE IF NOT EXISTS rumah_ibadah (
    id             INT AUTO_INCREMENT PRIMARY KEY,
    nama_ibadah    VARCHAR(150)  NOT NULL,
    kategori       ENUM('Masjid','Musholla','Gereja','Pura','Vihara','Klenteng','Lainnya') NOT NULL DEFAULT 'Masjid',
    alamat         VARCHAR(255)  DEFAULT NULL,
    nama_pengurus  VARCHAR(100)  DEFAULT NULL,
    no_telp        VARCHAR(20)   DEFAULT NULL,
    kuota_bantuan  INT           NOT NULL DEFAULT 20,
    radius_m       INT           NOT NULL DEFAULT 300,
    lat            DOUBLE        NOT NULL,
    lng            DOUBLE        NOT NULL,
    dibuat_oleh    INT           DEFAULT NULL,
    created_at     TIMESTAMP     DEFAULT CURRENT_TIMESTAMP,
    updated_at     TIMESTAMP     DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (dibuat_oleh) REFERENCES users(id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- ────────────────────────────────────────
-- RUMAH MISKIN / KPM
-- ────────────────────────────────────────
CREATE TABLE IF NOT EXISTS rumah_miskin (
    id                   INT AUTO_INCREMENT PRIMARY KEY,
    nama_kepala_keluarga VARCHAR(150)  NOT NULL,
    nik                  VARCHAR(16)   DEFAULT NULL,
    tanggal_lahir        DATE          DEFAULT NULL,
    jenis_kelamin        ENUM('Laki-laki','Perempuan') DEFAULT 'Laki-laki',
    jumlah_tanggungan    TINYINT       DEFAULT 0,
    pendapatan_bulanan   BIGINT        DEFAULT 0,
    pekerjaan            VARCHAR(100)  DEFAULT NULL,
    kondisi_rumah        ENUM('Layak','Tidak Layak','Sangat Tidak Layak') NOT NULL DEFAULT 'Tidak Layak',
    no_telp              VARCHAR(20)   DEFAULT NULL,
    rt_rw                VARCHAR(20)   DEFAULT NULL,
    kelurahan            VARCHAR(100)  DEFAULT NULL,
    kecamatan            VARCHAR(100)  DEFAULT NULL,
    keterangan           TEXT          DEFAULT NULL,
    status_bantuan       ENUM('Belum Terbantu','Terjangkau','Sudah Menerima') NOT NULL DEFAULT 'Belum Terbantu',
    prioritas            TINYINT(1)   DEFAULT 0 COMMENT '1 = prioritas tinggi (terdampak bencana)',
    lat                  DOUBLE        NOT NULL,
    lng                  DOUBLE        NOT NULL,
    didata_oleh          INT           DEFAULT NULL,
    created_at           TIMESTAMP     DEFAULT CURRENT_TIMESTAMP,
    updated_at           TIMESTAMP     DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (didata_oleh) REFERENCES users(id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- ────────────────────────────────────────
-- BENCANA
-- ────────────────────────────────────────
CREATE TABLE IF NOT EXISTS bencana (
    id           INT AUTO_INCREMENT PRIMARY KEY,
    nama_bencana VARCHAR(150)  NOT NULL,
    jenis        ENUM('Banjir','Kebakaran','Gempa Bumi','Longsor','Angin Puting Beliung','Lainnya') NOT NULL DEFAULT 'Banjir',
    tanggal      DATE          NOT NULL,
    lokasi       VARCHAR(255)  DEFAULT NULL,
    deskripsi    TEXT          DEFAULT NULL,
    status       ENUM('Aktif','Selesai') NOT NULL DEFAULT 'Aktif',
    lat          DOUBLE        DEFAULT NULL,
    lng          DOUBLE        DEFAULT NULL,
    radius_m     INT           DEFAULT 500,
    dibuat_oleh  INT           DEFAULT NULL,
    created_at   TIMESTAMP     DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (dibuat_oleh) REFERENCES users(id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- ────────────────────────────────────────
-- WARGA TERDAMPAK BENCANA (relasi N:M)
-- ────────────────────────────────────────
CREATE TABLE IF NOT EXISTS bencana_terdampak (
    id           INT AUTO_INCREMENT PRIMARY KEY,
    bencana_id   INT NOT NULL,
    warga_id     INT NOT NULL,
    tingkat      ENUM('Ringan','Sedang','Berat') DEFAULT 'Sedang',
    keterangan   TEXT DEFAULT NULL,
    ditandai_oleh INT DEFAULT NULL,
    created_at   TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    UNIQUE KEY unik_bencana_warga (bencana_id, warga_id),
    FOREIGN KEY (bencana_id) REFERENCES bencana(id) ON DELETE CASCADE,
    FOREIGN KEY (warga_id)   REFERENCES rumah_miskin(id) ON DELETE CASCADE,
    FOREIGN KEY (ditandai_oleh) REFERENCES users(id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- ────────────────────────────────────────
-- BANTUAN TERSALUR
-- ────────────────────────────────────────
USE db_poverty_mapping;

CREATE TABLE IF NOT EXISTS bantuan_tersalur (
    id                         INT AUTO_INCREMENT PRIMARY KEY,
    warga_id                   INT NOT NULL,
    ibadah_id                  INT DEFAULT NULL,
    bencana_id                 INT DEFAULT NULL,
    jenis_bantuan              VARCHAR(150) NOT NULL,
    jumlah                     VARCHAR(100) DEFAULT NULL COMMENT 'mis: 50kg beras, Rp500.000',
    tanggal                    DATE NOT NULL,
    petugas                    VARCHAR(150) DEFAULT NULL,
    keterangan                 TEXT DEFAULT NULL,
    disalurkan_oleh            INT DEFAULT NULL,
    created_at                 TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    status                     ENUM('Pending','Tersalurkan') NOT NULL DEFAULT 'Tersalurkan',
    status_konfirmasi          ENUM('Menunggu','Dikonfirmasi','Ditolak') NOT NULL DEFAULT 'Menunggu',
    nama_penerima_konfirmasi   VARCHAR(150) DEFAULT NULL,
    catatan_konfirmasi         TEXT DEFAULT NULL,
    dikonfirmasi_oleh          INT DEFAULT NULL,
    tgl_konfirmasi             TIMESTAMP NULL DEFAULT NULL, -- <-- Tanda koma di sini tadinya ketinggalan
    
    -- DEKLARASI HUBUNGAN RELASI (FOREIGN KEY)
    FOREIGN KEY (warga_id)        REFERENCES rumah_miskin(id) ON DELETE CASCADE,
    FOREIGN KEY (ibadah_id)       REFERENCES rumah_ibadah(id) ON DELETE SET NULL,
    FOREIGN KEY (bencana_id)      REFERENCES bencana(id) ON DELETE SET NULL,
    FOREIGN KEY (disalurkan_oleh) REFERENCES users(id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

-- ────────────────────────────────────────
-- INDEX
-- ────────────────────────────────────────
CREATE INDEX idx_miskin_coords   ON rumah_miskin (lat, lng);
CREATE INDEX idx_ibadah_coords   ON rumah_ibadah (lat, lng);
CREATE INDEX idx_miskin_status   ON rumah_miskin (status_bantuan);
CREATE INDEX idx_miskin_prioritas ON rumah_miskin (prioritas);
CREATE INDEX idx_bencana_status  ON bencana (status);