<?php
// Fungsi untuk sanitasi input
function sanitize($data) {
    global $conn;
    $data = trim($data);
    $data = stripslashes($data);
    $data = htmlspecialchars($data);
    $data = mysqli_real_escape_string($conn, $data);
    return $data;
}

// Fungsi untuk validasi login
function cek_login() {
    if (!isset($_SESSION['user_id'])) {
        header("Location: " . BASE_URL . "/modules/auth/login.php");
        exit();
    }
}

// Fungsi untuk validasi role
function cek_role($allowed_roles) {
    if (!in_array($_SESSION['role'], $allowed_roles)) {
        header("Location: " . BASE_URL . "/index.php?access=denied");
        exit();
    }
}

// Fungsi untuk mendapatkan data user saat ini
// PERUBAHAN: Ganti nama fungsi dari get_current_user() menjadi get_current_user_data()
function get_current_user_data() {
    global $conn;
    $user_id = $_SESSION['user_id'];
    $query = "SELECT * FROM users WHERE id = $user_id";
    $result = mysqli_query($conn, $query);
    return mysqli_fetch_assoc($result);
}

// Fungsi untuk mendapatkan data karyawan berdasarkan user_id
function get_karyawan_by_user($user_id) {
    global $conn;
    $query = "SELECT * FROM karyawan WHERE user_id = $user_id";
    $result = mysqli_query($conn, $query);
    return mysqli_fetch_assoc($result);
}

// Fungsi untuk mengambil pengaturan
function get_pengaturan() {
    global $conn;
    $query = "SELECT * FROM pengaturan WHERE id = 1";
    $result = mysqli_query($conn, $query);
    return mysqli_fetch_assoc($result);
}

// Fungsi untuk format tanggal Indonesia
function tanggal_indo($tanggal) {
    $bulan = array(
        1 => 'Januari', 'Februari', 'Maret', 'April', 'Mei', 'Juni',
        'Juli', 'Agustus', 'September', 'Oktober', 'November', 'Desember'
    );
    $split = explode('-', $tanggal);
    return $split[2] . ' ' . $bulan[(int)$split[1]] . ' ' . $split[0];
}

// Fungsi untuk format rupiah
function format_rupiah($angka) {
    return 'Rp ' . number_format($angka, 0, ',', '.');
}

// Fungsi untuk hitung jumlah keterlambatan
function hitung_keterlambatan($jam_masuk, $jam_standar) {
    $masuk = strtotime($jam_masuk);
    $standar = strtotime($jam_standar);
    
    if ($masuk <= $standar) {
        return 0;
    }
    
    $selisih = $masuk - $standar;
    return floor($selisih / 60); // Dalam menit
}

// Fungsi untuk menghitung jumlah absensi dalam periode tertentu
function hitung_absensi($karyawan_id, $bulan, $tahun, $status = 'hadir') {
    global $conn;
    $query = "SELECT COUNT(*) as jumlah FROM absensi 
              WHERE karyawan_id = $karyawan_id 
              AND MONTH(tanggal) = $bulan 
              AND YEAR(tanggal) = $tahun 
              AND status = '$status'";
    $result = mysqli_query($conn, $query);
    $row = mysqli_fetch_assoc($result);
    return $row['jumlah'];
}

// Fungsi untuk memeriksa apakah sudah absen hari ini
function cek_sudah_absen($karyawan_id, $tanggal, $jenis) {
    global $conn;
    if ($jenis == 'masuk') {
        $query = "SELECT * FROM absensi WHERE karyawan_id = $karyawan_id AND tanggal = '$tanggal' AND jam_masuk IS NOT NULL";
    } else {
        $query = "SELECT * FROM absensi WHERE karyawan_id = $karyawan_id AND tanggal = '$tanggal' AND jam_keluar IS NOT NULL";
    }
    $result = mysqli_query($conn, $query);
    return mysqli_num_rows($result) > 0;
}

// Fungsi untuk cek izin akses module
function cek_akses($module, $aksi) {
    $allowed = false;
    $role = $_SESSION['role'];
    
    // Array akses berdasarkan role
    $akses = [
        'admin' => ['*' => ['*']],
        'hrd' => [
            'dashboard' => ['view'],
            'karyawan' => ['view', 'add', 'edit', 'delete'],
            'absensi' => ['view', 'add', 'edit', 'report'],
            'penggajian' => ['view', 'add', 'edit', 'report'],
            'qrcode' => ['view', 'generate']
        ],
        'karyawan' => [
            'dashboard' => ['view'],
            'absensi' => ['view', 'scan'],
            'penggajian' => ['view']
        ]
    ];
    
    // Jika role admin, berikan akses penuh
    if ($role == 'admin') {
        return true;
    }
    
    // Cek apakah module dan aksi ada di array akses
    if (isset($akses[$role][$module])) {
        if (in_array($aksi, $akses[$role][$module]) || in_array('*', $akses[$role][$module])) {
            $allowed = true;
        }
    }
    
    return $allowed;
}

// Fungsi untuk generate QR code (placeholder, akan menggunakan library)
function generate_qrcode($nik) {
    // Implementasi generate QR code akan ditambahkan nanti
    return $nik . '_qrcode.png';
}

// Fungsi untuk menghitung gaji total
function hitung_gaji_total($gaji_pokok, $tunjangan, $bonus, $potongan) {
    return $gaji_pokok + $tunjangan + $bonus - $potongan;
}

// Fungsi untuk menghitung potongan absensi
function hitung_potongan_absensi($karyawan_id, $bulan, $tahun) {
    global $conn;
    $pengaturan = get_pengaturan();
    
    // Hitung jumlah alpha
    $jumlah_alpha = hitung_absensi($karyawan_id, $bulan, $tahun, 'alpha');
    $potongan_alpha = $jumlah_alpha * $pengaturan['potongan_alpha'];
    
    // Hitung keterlambatan
    $query = "SELECT SUM(TIMESTAMPDIFF(MINUTE, '{$pengaturan['jam_masuk']}', jam_masuk)) as total_terlambat 
              FROM absensi 
              WHERE karyawan_id = $karyawan_id 
              AND MONTH(tanggal) = $bulan 
              AND YEAR(tanggal) = $tahun 
              AND jam_masuk > '{$pengaturan['jam_masuk']}'";
    $result = mysqli_query($conn, $query);
    $row = mysqli_fetch_assoc($result);
    $total_keterlambatan = $row['total_terlambat'] ?: 0;
    
    // Hitung potongan keterlambatan (per menit)
    $potongan_terlambat = ($total_keterlambatan / $pengaturan['toleransi_keterlambatan']) * $pengaturan['potongan_keterlambatan'];
    
    return $potongan_alpha + $potongan_terlambat;
}
?>