-- SADARI Database Schema
--
-- Safe to import directly against an existing (already-seeded) production
-- database: it never drops/recreates the database, every CREATE TABLE is
-- guarded with IF NOT EXISTS, and every seed INSERT only runs if its table
-- is still completely empty — so re-running this whole file against
-- production just adds whatever's missing (e.g. the new
-- langkah_sadari_images / edukasi_images tables) without touching or
-- duplicating existing data.
--
-- Run this against whichever database your api/config/database.php already
-- points at (e.g. `USE jokifigm_sadari;`) — this file no longer creates or
-- selects a database itself.

-- Users table (merged with admins)
CREATE TABLE IF NOT EXISTS users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(100) NOT NULL,
    email VARCHAR(100) UNIQUE NOT NULL,
    password VARCHAR(255) NOT NULL,
    phone VARCHAR(20),
    username VARCHAR(50) UNIQUE,
    role ENUM('user', 'admin') DEFAULT 'user',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

-- Articles table
CREATE TABLE IF NOT EXISTS articles (
    id INT PRIMARY KEY AUTO_INCREMENT,
    title VARCHAR(255) NOT NULL,
    content TEXT NOT NULL,
    image_url VARCHAR(255),
    author VARCHAR(100),
    created_by INT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (created_by) REFERENCES users(id) ON DELETE SET NULL
);

-- Testimonials table
CREATE TABLE IF NOT EXISTS testimonials (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(100) NOT NULL,
    story TEXT NOT NULL,
    image_url VARCHAR(255),
    age INT,
    location VARCHAR(100),
    created_by INT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (created_by) REFERENCES users(id) ON DELETE SET NULL
);

-- Chat rooms table
CREATE TABLE IF NOT EXISTS chat_rooms (
    id INT PRIMARY KEY AUTO_INCREMENT,
    user_id INT NOT NULL,
    status ENUM('active', 'closed') DEFAULT 'active',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
);

-- Messages table
CREATE TABLE IF NOT EXISTS messages (
    id INT PRIMARY KEY AUTO_INCREMENT,
    chat_room_id INT NOT NULL,
    sender_type ENUM('user', 'admin') NOT NULL,
    sender_id INT NOT NULL,
    message TEXT NOT NULL,
    is_read BOOLEAN DEFAULT FALSE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (chat_room_id) REFERENCES chat_rooms(id) ON DELETE CASCADE
);

-- Reminders table
CREATE TABLE IF NOT EXISTS reminders (
    id INT PRIMARY KEY AUTO_INCREMENT,
    user_id INT NOT NULL,
    title VARCHAR(255) NOT NULL,
    description TEXT,
    reminder_date DATE NOT NULL,
    reminder_time TIME NOT NULL,
    is_active BOOLEAN DEFAULT TRUE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
);

-- SADARI steps table (pre-populated)
CREATE TABLE IF NOT EXISTS sadari_steps (
    id INT PRIMARY KEY AUTO_INCREMENT,
    step_number INT NOT NULL,
    title VARCHAR(255) NOT NULL,
    description TEXT NOT NULL,
    image_url VARCHAR(255),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Risk factors table (pre-populated)
CREATE TABLE IF NOT EXISTS risk_factors (
    id INT PRIMARY KEY AUTO_INCREMENT,
    category ENUM('risk_factor', 'cancer_sign') NOT NULL,
    title VARCHAR(255) NOT NULL,
    description TEXT NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Langkah SADARI slide images (admin-manageable, served from api/uploads/langkah/)
CREATE TABLE IF NOT EXISTS langkah_sadari_images (
    id INT PRIMARY KEY AUTO_INCREMENT,
    step_number INT NOT NULL,
    image_path VARCHAR(255) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

-- Edukasi slide images (admin-manageable, served from api/uploads/edukasi/)
CREATE TABLE IF NOT EXISTS edukasi_images (
    id INT PRIMARY KEY AUTO_INCREMENT,
    order_number INT NOT NULL,
    image_path VARCHAR(255) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

-- ============================================================
-- Seed data — each block only inserts if its table is still
-- completely empty, so re-running this file is a no-op for
-- tables production has already populated.
-- ============================================================

-- Seed: admin account (username: admin, password: admin)
INSERT INTO users (name, email, password, phone, username, role)
SELECT name, email, password, phone, username, role FROM (
    SELECT 'Administrator' AS name, 'admin@sadari.com' AS email,
           '$2y$10$jJMAIA9uDumiTIRSDrYh3OTw0GaB9Pepm0c8kcXUfUwJC1UrT9oay' AS password,
           NULL AS phone, 'admin' AS username, 'admin' AS role
) AS seed
WHERE NOT EXISTS (SELECT 1 FROM users LIMIT 1);

-- Seed: SADARI steps
INSERT INTO sadari_steps (step_number, title, description, image_url)
SELECT step_number, title, description, image_url FROM (
    SELECT 1 AS step_number, 'Berdiri di Depan Cermin' AS title, 'Berdirilah di depan cermin dengan tubuh bagian atas telanjang. Perhatikan bentuk, ukuran, dan kontur payudara Anda. Cari perubahan seperti pembengkakan, perubahan kulit, atau perubahan pada puting.' AS description, NULL AS image_url
    UNION ALL SELECT 2, 'Angkat Kedua Tangan', 'Angkat kedua tangan ke atas kepala dan perhatikan kembali payudara Anda. Lihat apakah ada perubahan bentuk atau kontur saat tangan diangkat.', NULL
    UNION ALL SELECT 3, 'Letakkan Tangan di Pinggang', 'Letakkan kedua tangan di pinggang dan tekan dengan kuat untuk mengencangkan otot dada. Perhatikan lagi apakah ada perubahan pada payudara.', NULL
    UNION ALL SELECT 4, 'Berbaring Telentang', 'Berbaringlah telentang dengan bantal di bawah bahu kanan. Letakkan tangan kanan di belakang kepala.', NULL
    UNION ALL SELECT 5, 'Periksa Payudara Kanan', 'Gunakan tiga jari tengah tangan kiri untuk memeriksa payudara kanan. Gunakan gerakan melingkar kecil dengan tekanan ringan, sedang, dan kuat. Periksa seluruh area payudara dari tulang selangka hingga ke bawah payudara, dan dari ketiak hingga tengah dada.', NULL
    UNION ALL SELECT 6, 'Periksa Area Ketiak', 'Periksa area ketiak dengan gerakan yang sama. Rasakan apakah ada benjolan atau penebalan.', NULL
    UNION ALL SELECT 7, 'Periksa Puting', 'Tekan puting dengan lembut dan periksa apakah ada cairan yang keluar. Laporkan setiap cairan yang keluar kepada dokter.', NULL
    UNION ALL SELECT 8, 'Ulangi untuk Payudara Kiri', 'Pindahkan bantal ke bawah bahu kiri dan ulangi langkah 4-7 untuk payudara kiri menggunakan tangan kanan.', NULL
) AS seed
WHERE NOT EXISTS (SELECT 1 FROM sadari_steps LIMIT 1);

-- Seed: Langkah SADARI slide images (from the original fitur/LANGKAH SADARI set)
INSERT INTO langkah_sadari_images (step_number, image_path)
SELECT step_number, image_path FROM (
    SELECT 1 AS step_number, 'uploads/langkah/langkah_1.png' AS image_path
    UNION ALL SELECT 2, 'uploads/langkah/langkah_2.png'
    UNION ALL SELECT 3, 'uploads/langkah/langkah_3.png'
    UNION ALL SELECT 4, 'uploads/langkah/langkah_4.png'
    UNION ALL SELECT 5, 'uploads/langkah/langkah_5.png'
    UNION ALL SELECT 6, 'uploads/langkah/langkah_6.png'
    UNION ALL SELECT 7, 'uploads/langkah/langkah_7.png'
    UNION ALL SELECT 8, 'uploads/langkah/langkah_8.png'
    UNION ALL SELECT 9, 'uploads/langkah/langkah_9.png'
) AS seed
WHERE NOT EXISTS (SELECT 1 FROM langkah_sadari_images LIMIT 1);

-- Seed: Edukasi slide images (from the original fitur/EDUKASI set)
INSERT INTO edukasi_images (order_number, image_path)
SELECT order_number, image_path FROM (
    SELECT 1 AS order_number, 'uploads/edukasi/edukasi_1.png' AS image_path
    UNION ALL SELECT 2, 'uploads/edukasi/edukasi_2.png'
    UNION ALL SELECT 3, 'uploads/edukasi/edukasi_3.png'
    UNION ALL SELECT 4, 'uploads/edukasi/edukasi_4.png'
    UNION ALL SELECT 5, 'uploads/edukasi/edukasi_5.png'
) AS seed
WHERE NOT EXISTS (SELECT 1 FROM edukasi_images LIMIT 1);

-- Seed: risk factors
INSERT INTO risk_factors (category, title, description)
SELECT category, title, description FROM (
    SELECT 'risk_factor' AS category, 'Usia' AS title, 'Risiko kanker payudara meningkat seiring bertambahnya usia, terutama setelah usia 50 tahun.' AS description
    UNION ALL SELECT 'risk_factor', 'Riwayat Keluarga', 'Memiliki anggota keluarga dekat (ibu, saudara perempuan, anak perempuan) dengan kanker payudara meningkatkan risiko.'
    UNION ALL SELECT 'risk_factor', 'Riwayat Pribadi', 'Pernah mengalami kanker payudara atau kondisi payudara non-kanker tertentu meningkatkan risiko.'
    UNION ALL SELECT 'risk_factor', 'Menstruasi Dini', 'Mulai menstruasi sebelum usia 12 tahun meningkatkan risiko.'
    UNION ALL SELECT 'risk_factor', 'Menopause Terlambat', 'Mengalami menopause setelah usia 55 tahun meningkatkan risiko.'
    UNION ALL SELECT 'risk_factor', 'Tidak Memiliki Anak', 'Tidak pernah hamil atau hamil pertama kali setelah usia 30 tahun meningkatkan risiko.'
    UNION ALL SELECT 'risk_factor', 'Terapi Hormon', 'Penggunaan terapi hormon kombinasi setelah menopause meningkatkan risiko.'
    UNION ALL SELECT 'risk_factor', 'Gaya Hidup', 'Obesitas, kurang aktivitas fisik, dan konsumsi alkohol berlebihan meningkatkan risiko.'
    UNION ALL SELECT 'cancer_sign', 'Benjolan di Payudara', 'Benjolan atau penebalan yang terasa berbeda dari jaringan sekitarnya.'
    UNION ALL SELECT 'cancer_sign', 'Perubahan Ukuran atau Bentuk', 'Perubahan ukuran, bentuk, atau kontur payudara.'
    UNION ALL SELECT 'cancer_sign', 'Perubahan Kulit', 'Kulit payudara menjadi berkerut, memerah, atau seperti kulit jeruk.'
    UNION ALL SELECT 'cancer_sign', 'Perubahan Puting', 'Puting tertarik ke dalam, keluar cairan (selain ASI), atau mengalami perubahan bentuk.'
    UNION ALL SELECT 'cancer_sign', 'Nyeri Payudara', 'Nyeri atau ketidaknyamanan yang tidak biasa pada payudara atau puting.'
    UNION ALL SELECT 'cancer_sign', 'Pembengkakan', 'Pembengkakan pada sebagian atau seluruh payudara.'
    UNION ALL SELECT 'cancer_sign', 'Kemerahan atau Pengelupasan', 'Kemerahan atau pengelupasan kulit pada puting atau payudara.'
    UNION ALL SELECT 'cancer_sign', 'Benjolan di Ketiak', 'Benjolan atau pembengkakan di area ketiak.'
) AS seed
WHERE NOT EXISTS (SELECT 1 FROM risk_factors LIMIT 1);

-- Seed: sample articles
INSERT INTO articles (title, content, author, created_by)
SELECT title, content, author, created_by FROM (
    SELECT 'Pentingnya Deteksi Dini Kanker Payudara' AS title, 'Deteksi dini kanker payudara sangat penting karena dapat meningkatkan peluang kesembuhan hingga 90%. Pemeriksaan payudara sendiri (SADARI) adalah salah satu metode deteksi dini yang mudah dilakukan di rumah. Lakukan SADARI secara rutin setiap bulan, idealnya 7-10 hari setelah menstruasi berakhir. Jika Anda menemukan benjolan atau perubahan pada payudara, segera konsultasikan dengan dokter.' AS content, 'Dr. Sarah' AS author, 1 AS created_by
    UNION ALL SELECT 'Cara Menjaga Kesehatan Payudara', 'Menjaga kesehatan payudara dapat dilakukan dengan beberapa cara: 1) Lakukan SADARI rutin setiap bulan, 2) Jaga berat badan ideal, 3) Olahraga teratur minimal 30 menit sehari, 4) Konsumsi makanan sehat kaya serat, buah, dan sayuran, 5) Batasi konsumsi alkohol, 6) Hindari merokok, 7) Lakukan pemeriksaan mammografi sesuai anjuran dokter.', 'Dr. Maya', 1
    UNION ALL SELECT 'Mitos dan Fakta Kanker Payudara', 'Banyak mitos tentang kanker payudara yang beredar di masyarakat. Berikut beberapa fakta: 1) Kanker payudara tidak hanya menyerang wanita, pria juga bisa terkena, 2) Menggunakan bra berkawat tidak menyebabkan kanker payudara, 3) Benjolan di payudara tidak selalu kanker, bisa juga kista atau tumor jinak, 4) Kanker payudara bisa disembuhkan jika terdeteksi dini, 5) Riwayat keluarga meningkatkan risiko tetapi bukan penyebab pasti.', 'Dr. Linda', 1
) AS seed
WHERE NOT EXISTS (SELECT 1 FROM articles LIMIT 1);

-- Seed: sample testimonials
INSERT INTO testimonials (name, story, age, location, created_by)
SELECT name, story, age, location, created_by FROM (
    SELECT 'Ibu Siti' AS name, 'Saya didiagnosis kanker payudara stadium 2 pada tahun 2020. Berkat deteksi dini melalui SADARI, saya segera mendapat penanganan. Setelah menjalani operasi dan kemoterapi, Alhamdulillah saya dinyatakan sembuh. Pesan saya, jangan takut untuk memeriksa payudara sendiri secara rutin. Deteksi dini menyelamatkan hidup saya.' AS story, 45 AS age, 'Jakarta' AS location, 1 AS created_by
    UNION ALL SELECT 'Ibu Rina', 'Awalnya saya menemukan benjolan kecil saat melakukan SADARI. Saya langsung konsultasi ke dokter dan ternyata kanker stadium 1. Saya sangat bersyukur karena rutin melakukan SADARI setiap bulan. Sekarang saya sudah 3 tahun bebas kanker dan aktif berbagi pengalaman untuk mendorong wanita lain melakukan SADARI.', 38, 'Bandung', 1
    UNION ALL SELECT 'Ibu Dewi', 'Perjalanan melawan kanker payudara tidak mudah, tetapi dukungan keluarga dan deteksi dini membuat saya kuat. Saya menemukan benjolan saat SADARI dan segera berobat. Setelah 2 tahun pengobatan, saya dinyatakan sembuh. Sekarang saya aktif di komunitas penyintas kanker payudara untuk memberi semangat kepada yang lain.', 52, 'Surabaya', 1
) AS seed
WHERE NOT EXISTS (SELECT 1 FROM testimonials LIMIT 1);
