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

class MY_Exceptions extends CI_Exceptions {

    public function show_error($heading, $message, $template = 'error_general', $status_code = 500)
    {
        // Jika ini error database dan db_debug dimatikan, CI biasanya tidak masuk sini.
        // Tapi jika kita paksa lewat show_error, kita tangani di sini.
        
        // Logika ini sebenarnya sudah ada di parent, tapi kita pastikan view path benar
        return parent::show_error($heading, $message, $template, $status_code);
    }

    // Override khusus untuk Database Error
    public function show_db_error($heading, $message)
    {
        // Cek Session Admin
        $CI =& get_instance();
        $is_admin = false;
        
        // Pastikan library session sudah diload
        if (isset($CI->session)) {
            if ($CI->session->userdata('role_name') == 'administrator') {
                $is_admin = true;
            }
        }

        // Set data untuk view
        $data = array(
            'heading' => $heading,
            'message' => $message,
            'is_admin' => $is_admin
        );

        // Load view custom kita
        // Kita gunakan load view manual karena parent::show_db_error punya logic sendiri
        echo $CI->load->view('errors/html/error_db', $data, TRUE);
        exit(1); // EXIT_ERROR
    }
    
    // Override untuk Exception
    public function show_exception(Exception $exception)
    {
        $CI =& get_instance();
        $is_admin = false;
        
        if (isset($CI->session)) {
            if ($CI->session->userdata('role_name') == 'administrator') {
                $is_admin = true;
            }
        }

        $data = array(
            'heading' => 'An uncaught Exception was encountered',
            'message' => $exception->getMessage(),
            'exception' => $exception,
            'is_admin' => $is_admin
        );

        echo $CI->load->view('errors/html/error_exception', $data, TRUE);
        exit(1);
    }
}