<?php

/**
 * Sesion
 *
 * @package Helpers
 * @subpackage
 * @category Sesion
 * @author cvillegas
 */
if (!defined('BASEPATH'))
    exit('No direct script access allowed');

//funcion que inicializa la session 
if (!function_exists('init_session')) {

    function init_session() {
        if (ENVIRONMENT === 'production') {
            $CI = & get_instance();
            if (session_status() !== PHP_SESSION_ACTIVE) {
                session_name($CI->config->item('session_name'));
                session_set_cookie_params(0, '/', $CI->config->item('session_domain'));
            }
        }
        @session_start();
    }

}

//funcion que cierra la sesion
if (!function_exists('unset_session')) {

    function unset_session() {
        init_session();
        $CI = & get_instance();
        if (isset($_SESSION[$CI->config->item('project_name')]['user'])) {
            unset($_SESSION[$CI->config->item('project_name')]['user']);
        }
    }

}

//funcion que verifica si la session tiene el id del usuario 
if (!function_exists('check_id')) {

    function check_id() {
        init_session();
        $CI = & get_instance();
        return (isset($_SESSION[$CI->config->item('project_name')]['user']['id'])) ? $_SESSION[$CI->config->item('project_name')]['user']['id'] : FALSE;
    }

}
//funcion que verifica si la session tiene el id del empleado 
if (!function_exists('check_empleado_id')) {

    function check_empleado_id() {
        init_session();
        $CI = & get_instance();
        $usuario_id = (isset($_SESSION[$CI->config->item('project_name')]['user']['id'])) ? $_SESSION[$CI->config->item('project_name')]['user']['id'] : FALSE;
        if ($usuario_id === FALSE) {
            return FALSE;
        }
        $CI->load->model('usuarios_model');
        return $CI->usuarios_model->get_empleado_id_by_id($usuario_id);
    }

}
//funcion que verifica si la session tiene el id del usuario 
if (!function_exists('get_rol_id')) {

    function get_rol_id() {
        init_session();
        $CI = & get_instance();
        return (isset($_SESSION[$CI->config->item('project_name')]['user']['rol_id'])) ? $_SESSION[$CI->config->item('project_name')]['user']['rol_id'] : FALSE;
    }

}
//funcion que verifica si la session tiene el id del usuario admin
if (!function_exists('check_id_user_admin')) {

    function check_id_user_admin() {
        init_session();
        $CI = & get_instance();
        if (isset($_SESSION[$CI->config->item('project_name')]['user']['tipo_usuario'])) {
            return ($_SESSION[$CI->config->item('project_name')]['user']['id'] === "1") ? $_SESSION[$CI->config->item('project_name')]['user']['id'] : FALSE;
        } else {
            return FALSE;
        }
    }

}

//funcion que regresa el valor de los numeros de intentos del captcha
if (!function_exists('check_intentos_captcha')) {

    function check_intentos_captcha() {
        init_session();
        $CI = & get_instance();
        return (isset($_SESSION[$CI->config->item('project_name') . $CI->config->item('intentos_captcha')])) ? $_SESSION[$CI->config->item('project_name') . $CI->config->item('intentos_captcha')] : 0;
    }

}

if (!function_exists('session_reopen')) {

    function session_reopen() {
        ini_set('session.use_only_cookies', false);
        ini_set('session.use_cookies', false);
        ini_set('session.use_trans_sid', false); //May be necessary in some situations
        ini_set('session.cache_limiter', null);
        @session_start(); //Reopen the (previously closed) session for writing.
    }

}

/**
 * Obtiene el ID del usuario actual
 * @return int|boolean ID del usuario actual o FALSE si no hay usuario en sesión
 */
if (!function_exists('get_current_user_id')) {
    function get_current_user_id() {
        // Usar la función check_id ya existente para obtener el ID del usuario
        $user_id = check_id();
        
        // Si no hay usuario en sesión, devolver un valor por defecto o generar un error
        if (!$user_id) {
            // Registrar el error
            log_message('error', 'Intento de obtener el ID de usuario sin sesión iniciada');
            
            // Opción 1: Devolver un valor por defecto (por ejemplo, 1 para el admin)
            return 1;
            
            // Opción 2: Devolver FALSE
            // return FALSE;
        }
        
        return $user_id;
    }
}