<?php
defined('BASEPATH') OR exit('No direct script access allowed');

/**
 * Authorization Helper
 * Helper sederhana untuk mengecek role dan permission
 */

if (!function_exists('is_admin')) {
    /**
     * Cek apakah user adalah admin
     */
    function is_admin() {
        $CI =& get_instance();
        return $CI->session->userdata('role') == 'admin';
    }
}

if (!function_exists('is_warga')) {
    /**
     * Cek apakah user adalah warga
     */
    function is_warga() {
        $CI =& get_instance();
        return $CI->session->userdata('role') == 'warga';
    }
}

if (!function_exists('check_login')) {
    /**
     * Cek apakah user sudah login
     */
    function check_login() {
        $CI =& get_instance();
        if(!$CI->session->userdata('logged_in')) {
            $CI->session->set_flashdata('error', 'Silakan login terlebih dahulu!');
            redirect('auth');
        }
    }
}

if (!function_exists('require_admin')) {
    /**
     * Require user harus admin, jika tidak redirect
     */
    function require_admin() {
        $CI =& get_instance();
        check_login();
        
        if(!is_admin()) {
            $CI->session->set_flashdata('error', 'Akses ditolak! Hanya admin yang dapat mengakses halaman ini.');
            redirect('dashboard');
        }
    }
}

if (!function_exists('can')) {
    /**
     * Cek apakah user memiliki permission
     * @param string $module - nama module (kas, iuran, surat, dll)
     * @param string $action - aksi (view, create, edit, delete, generate)
     * @return bool
     */
    function can($module, $action) {
        $CI =& get_instance();
        $role = $CI->session->userdata('role');
        
        // Definisi permission berdasarkan role
        $permissions = array(
            'admin' => array(
                'dashboard' => array('view'),
                'warga' => array('view', 'create', 'edit', 'delete'),
                'iuran' => array('view', 'create', 'edit', 'delete', 'generate', 'verify', 'pay'),
                'tabungan' => array('view', 'create', 'edit', 'delete'),
                'kas' => array('view', 'create', 'edit', 'delete', 'generate'),
                'pinjaman' => array('view', 'create', 'edit', 'delete', 'approve', 'reject'),
                'pengumuman' => array('view', 'create', 'edit', 'delete'),
                'surat' => array('view', 'create', 'edit', 'delete', 'approve', 'reject', 'generate'),
                'jadwal' => array('view', 'create', 'edit', 'delete') // TAMBAHAN: Permission untuk jadwal
            ),
            'warga' => array(
                'dashboard' => array('view'),
                'warga' => array('view'),
                'iuran' => array('view', 'pay'),
                'tabungan' => array('view'),
                'kas' => array('view'),
                'pinjaman' => array('view', 'create'),
                'pengumuman' => array('view'),
                'surat' => array('view', 'create'),
                'jadwal' => array('view') // TAMBAHAN: Warga hanya bisa view jadwal
            )
        );
        
        if(!isset($permissions[$role][$module])) {
            return false;
        }
        
        return in_array($action, $permissions[$role][$module]);
    }
}

if (!function_exists('cannot')) {
    /**
     * Kebalikan dari can()
     */
    function cannot($module, $action) {
        return !can($module, $action);
    }
}