<?php

function is_logedin()
{
    $ci = get_instance();
    if (!$ci->session->has_userdata('login_session')) {
        set_pesan('Debe iniciar sesión!.');
        redirect('auth');
    }
}

function is_admin()
{
    $status = false;

    $ci = get_instance();
    $role = $ci->session->userdata('login_session')['role'];

    if ($role == 'admin') {
        $status = true;
    }

    return $status;
}

function set_pesan($message, $type = true, $titulo = '')
{
    $ci = get_instance();
    if ($type) {
        $ci->session->set_flashdata('pesan', "<div class='alert alert-success' data-delay='200' data-autohide='true' ><strong> {$titulo} </strong> {$message} <button type='button' class='close' data-dismiss='alert' aria-label='Close'><span aria-hidden='true'>&times;</span></button></div>");
    } else {
        $ci->session->set_flashdata('pesan', "<div class='alert alert-danger' data-delay='200' data-autohide='true'><strong> {$titulo} </strong> {$message} <button type='button' class='close' data-dismiss='alert' aria-label='Close'><span aria-hidden='true'>&times;</span></button></div>");
    }
}

function userdata($field)
{
    $ci = get_instance();
    $ci->load->model('Admin_model', 'admin');

    $userId = $ci->session->userdata('login_session')['user'];
    return $ci->admin->get('tbl_user', ['id_user' => $userId])[$field];
}

function entitydata()
{
    $ci = get_instance();
    return $ci->session->userdata('login_session')['entidad'];
}

function entitydataId()
{
    $ci = get_instance();
    return $ci->session->userdata('login_session')['id_entidad'];
}

function output_json($data)
{
    $ci = get_instance();
    $data = json_encode($data);
    $ci->output->set_content_type('application/json')->set_output($data);
}

function substrTableCell($string, $start, $length)
{
    if (strlen(trim($string)) > $length) {
        return substr($string, $start, $length) . '...';
    } else {
        return $string;
    }
}

function startsWith( $haystack, $needle ) 
{
    $length = strlen( $needle );
    return substr( $haystack, 0, $length ) === $needle;
}

function endsWith( $haystack, $needle ) 
{
   $length = strlen( $needle );
   if( !$length ) {
       return true;
   }
   return substr( $haystack, -$length ) === $needle;
}



if(!function_exists('json_encode'))
{

    function json_encode($a=false)
    {
        // Some basic debugging to ensure we have something returned
        if (is_null($a)) return 'null';
        if ($a === false) return 'false';
        if ($a === true) return 'true';
    
        if (is_scalar($a))
        {
            if (is_float($a))
            {
            // Always use '.' for floats.
                return floatval(str_replace(',', '.', strval($a)));
            }
            if (is_string($a))
            {
                static $jsonReplaces = array(array('\\', '/', "\n", "\t", "\r", "\b", "\f", '"'), array('\\\\', '\\/', '\\n', '\\t', '\\r', '\\b', '\\f', '\"'));
                return '"' . str_replace($jsonReplaces[0], $jsonReplaces[1], $a) . '"';
            }
            else
                return $a;
        }
        $isList = true;
        for ($i = 0, reset($a); true; $i++) {
            if (key($a) !== $i)
            {
                $isList = false;
                break;
            }
        }
        $result = array();
        if ($isList)
        {
            foreach ($a as $v) $result[] = json_encode($v);
            return '[' . join(',', $result) . ']';
        }
        else
        {
            foreach ($a as $k => $v) $result[] = json_encode($k).':'.json_encode($v);
            return '[{' . join(',', $result) . '}]';
        }
    }  
}


if(!function_exists('getBrowserAgent'))
{
    function getBrowserAgent()
    {
        $CI = get_instance();
        $CI->load->library('user_agent');

        $agent = '';

        if ($CI->agent->is_browser())
        {
            $agent = $CI->agent->browser().' '.$CI->agent->version();
        }
        else if ($CI->agent->is_robot())
        {
            $agent = $CI->agent->robot();
        }
        else if ($CI->agent->is_mobile())
        {
            $agent = $CI->agent->mobile();
        }
        else
        {
            $agent = 'Unidentified User Agent';
        }

        return $agent;
    }
}

if(!function_exists('iif'))
{
    function iif($eval1, $eval2, $response_true, $response_false)
    {

        $result = "";

        if ($eval1==$eval2)
        {
            $result = $response_true;
        }
        else
        {
            $result = $response_false;
        }

        return $result;

    }

}



function funcValidarRut($rut) 
{

    $CI =& get_instance();

    $CI->form_validation->set_message('funcValidarRutLocal', 'El campo {field} no es un RUT válido.');
    $CI->form_validation->set_message('funcValidarRut', 'El campo {field} no es un RUT válido.');


    // Verifica que no esté vacio y que el string sea de tamaño mayor a 3 carácteres(1-9)        
    if ((empty($rut)) || strlen($rut) < 3) {
        return false;
        //return array('error' => true, 'msj' => 'RUT vacío o con menos de 3 caracteres.');
    }

    // Quitar los últimos 2 valores (el guión y el dígito verificador) y luego verificar que sólo sea
    // numérico
    $parteNumerica = str_replace(substr($rut, -2, 2), '', $rut);

    if (!preg_match("/^[0-9]*$/", $parteNumerica)) {
        return false;
        //return array('error' => true, 'msj' => 'La parte numérica del RUT sólo debe contener números.');
    }

    $guionYVerificador = substr($rut, -2, 2);
    // Verifica que el guion y dígito verificador tengan un largo de 2.
    if (strlen($guionYVerificador) != 2) {
        return false;
        //return array('error' => true, 'msj' => 'Error en el largo del dígito verificador.');
    }

    // obliga a que el dígito verificador tenga la forma -[0-9] o -[kK]
    if (!preg_match('/(^[-]{1}+[0-9kK]).{0}$/', $guionYVerificador)) {
        return false;
        //return array('error' => true, 'msj' => 'El dígito verificador no cuenta con el patrón requerido');
    }

    // Valida que sólo sean números, excepto el último dígito que pueda ser k
    if (!preg_match("/^[0-9.]+[-]?+[0-9kK]{1}/", $rut)) {
        return false;
        //return array('error' => true, 'msj' => 'Error al digitar el RUT');
    }

    $rutV = preg_replace('/[\.\-]/i', '', $rut);
    $dv = substr($rutV, -1);
    $numero = substr($rutV, 0, strlen($rutV) - 1);
    $i = 2;
    $suma = 0;
    foreach (array_reverse(str_split($numero)) as $v) {
        if ($i == 8) {
            $i = 2;
        }
        $suma += $v * $i;
        ++$i;
    }
    $dvr = 11 - ($suma % 11);
    if ($dvr == 11) {
        $dvr = 0;
    }
    if ($dvr == 10) {
        $dvr = 'K';
    }
    if ($dvr == strtoupper($dv)) {
        //return array('error' => false, 'msj' => 'RUT ingresado correctamente.');
        return true;
    } else {
        //return array('error' => true, 'msj' => 'El RUT ingresado no es válido.');
        return false;
    }
}
