-- Database schema untuk sistem Info Hadir
-- Jalankan script ini di MySQL untuk membuat database dan tabel

CREATE DATABASE IF NOT EXISTS info_hadir;
USE info_hadir;

-- Tabel untuk menyimpan data jabatan
CREATE TABLE IF NOT EXISTS positions (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    order_index INT NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

-- Tabel untuk menyimpan data user/login
CREATE TABLE IF NOT EXISTS users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) UNIQUE NOT NULL,
    password VARCHAR(255) NOT NULL,
    position_id INT,
    full_name VARCHAR(255) NOT NULL,
    is_admin BOOLEAN DEFAULT FALSE,
    is_active BOOLEAN DEFAULT TRUE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (position_id) REFERENCES positions(id) ON DELETE SET NULL
);

-- Tabel untuk menyimpan status kehadiran harian
CREATE TABLE IF NOT EXISTS attendance (
    id INT AUTO_INCREMENT PRIMARY KEY,
    position_id INT NOT NULL,
    attendance_date DATE NOT NULL,
    status ENUM('present', 'absent', 'cuti') DEFAULT 'absent',
    updated_by INT,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (position_id) REFERENCES positions(id) ON DELETE CASCADE,
    FOREIGN KEY (updated_by) REFERENCES users(id) ON DELETE SET NULL,
    UNIQUE KEY unique_position_date (position_id, attendance_date)
);

-- Insert data jabatan default
INSERT INTO positions (name, order_index) VALUES
('Kepala Dinas', 1),
('Sekretaris', 2),
('Kapala Bidang Pendidikan Dasar', 3),
('Kapala Bidang Pembinaan PAUD dan Pendidikan Non Formal', 4),
('Kapala Bidang Kelembagaan dan Sarana Prasarana Pendidikan', 5),
('Kapala Bidang Kebudayaan', 6),
('Kasubag Umum dan Kepegawaian', 7),
('Kasubag Perencanaan dan Pelaporan', 8),
('Kasubag Keuangan', 9);

-- Insert data user default
INSERT INTO users (username, password, position_id, full_name, is_admin) VALUES
('admin', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', NULL, 'Administrator', TRUE),
('kepala', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 1, 'Kepala Dinas', FALSE),
('sekretaris', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 2, 'Sekretaris', FALSE),
('kabid_dikdas', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 3, 'Kapala Bidang Pendidikan Dasar', FALSE),
('kabid_paud', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 4, 'Kapala Bidang Pembinaan PAUD dan Pendidikan Non Formal', FALSE),
('kabid_sarpras', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 5, 'Kapala Bidang Kelembagaan dan Sarana Prasarana Pendidikan', FALSE),
('kabid_budaya', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 6, 'Kapala Bidang Kebudayaan', FALSE),
('kasubag_umum', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 7, 'Kasubag Umum dan Kepegawaian', FALSE),
('kasubag_rencana', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 8, 'Kasubag Perencanaan dan Pelaporan', FALSE),
('kasubag_keuangan', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 9, 'Kasubag Keuangan', FALSE);

-- Insert data kehadiran default untuk hari ini (semua absent)
INSERT INTO attendance (position_id, attendance_date, status) 
SELECT id, CURDATE(), 'absent' FROM positions;
