-- Script SQL untuk Setup Database Aplikasi Prediksi Cuaca
-- Database: cuaca_prediksi
-- Dibuat untuk project PHP dengan struktur yang sesuai

-- Membuat database jika belum ada
CREATE DATABASE IF NOT EXISTS cuaca_prediksi CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- Menggunakan database
USE cuaca_prediksi;

-- Tabel untuk menyimpan data prediksi cuaca
CREATE TABLE IF NOT EXISTS weather_predictions (
    id INT AUTO_INCREMENT PRIMARY KEY,
    lokasi VARCHAR(100) NOT NULL COMMENT 'Nama lokasi/kota',
    suhu DOUBLE NOT NULL COMMENT 'Suhu dalam derajat Celsius',
    terasa_seperti DOUBLE NOT NULL COMMENT 'Suhu yang terasa seperti dalam derajat Celsius',
    kondisi_cuaca ENUM('cerah', 'hujan', 'berawan', 'mendung', 'badai', 'salju', 'kabut') NOT NULL COMMENT 'Kondisi cuaca',
    icon_kondisi VARCHAR(50) NOT NULL COMMENT 'Emoji icon kondisi cuaca',
    tanggal_jam DATETIME NOT NULL COMMENT 'Tanggal dan jam prediksi',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT 'Timestamp pembuatan record',
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'Timestamp update record',
    INDEX idx_lokasi (lokasi),
    INDEX idx_kondisi_cuaca (kondisi_cuaca),
    INDEX idx_tanggal_jam (tanggal_jam),
    INDEX idx_created_at (created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Tabel untuk menyimpan data user (authentication)
CREATE TABLE IF NOT EXISTS users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) UNIQUE NOT NULL COMMENT 'Username untuk login',
    password VARCHAR(255) NOT NULL COMMENT 'Password yang di-hash',
    nama VARCHAR(100) NOT NULL COMMENT 'Nama lengkap user',
    level ENUM('admin', 'user') DEFAULT 'user' COMMENT 'Level akses user',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT 'Timestamp pembuatan akun',
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'Timestamp update akun',
    INDEX idx_username (username),
    INDEX idx_level (level)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Insert default admin user jika belum ada
INSERT IGNORE INTO users (username, password, nama, level) VALUES
('admin', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 'Administrator', 'admin');
-- Password default: admin123 (sudah di-hash dengan password_hash())

-- Query-query umum yang digunakan dalam aplikasi:

-- 1. Menampilkan semua data cuaca dengan pagination
-- SELECT * FROM weather_predictions ORDER BY tanggal_jam DESC LIMIT ?, ?;

-- 2. Menampilkan data cuaca dengan filter search
-- SELECT * FROM weather_predictions
-- WHERE (lokasi LIKE ? OR kondisi_cuaca LIKE ?) AND kondisi_cuaca = ?
-- ORDER BY tanggal_jam DESC LIMIT ?, ?;

-- 3. Menghitung total records untuk pagination
-- SELECT COUNT(*) as total FROM weather_predictions WHERE 1=1 [filter conditions];

-- 4. Insert data cuaca baru
-- INSERT INTO weather_predictions (lokasi, suhu, terasa_seperti, kondisi_cuaca, icon_kondisi, tanggal_jam)
-- VALUES (?, ?, ?, ?, ?, ?);

-- 5. Update data cuaca
-- UPDATE weather_predictions SET lokasi = ?, suhu = ?, terasa_seperti = ?, kondisi_cuaca = ?, icon_kondisi = ?, tanggal_jam = ?
-- WHERE id = ?;

-- 6. Delete data cuaca
-- DELETE FROM weather_predictions WHERE id = ?;

-- 7. Select data cuaca untuk edit
-- SELECT * FROM weather_predictions WHERE id = ?;

-- 8. Authentication user
-- SELECT id, username, nama, password, level FROM users WHERE username = ?;

-- 9. Dashboard: Total prediksi
-- SELECT COUNT(*) as total FROM weather_predictions;

-- 10. Dashboard: Prediksi terbaru (5 records terakhir)
-- SELECT * FROM weather_predictions ORDER BY created_at DESC LIMIT 5;

-- 11. Insert user baru (untuk registrasi jika diperlukan)
-- INSERT INTO users (username, password, nama, level) VALUES (?, ?, ?, ?);

-- 12. Update user (untuk change password/profile)
-- UPDATE users SET password = ?, nama = ?, level = ? WHERE id = ?;

-- Struktur lengkap database sudah siap digunakan!
