<?php
/**
 * Genera select de divisiones, en caso de que el usuario tenga más de una división
 * 
 * @param bool $multiple
 * @return string select divisiones
 */
function select_divisiones($multiple = FALSE, $id = FALSE) {
    if (auth()->user()->divisiones()->count() > 1) {
        $result = $multiple? Form::hidden('divisiones') : '';
        $name = $multiple? 'divisiones[]' : 'division_id';
        if($id === FALSE) {
            $id = $multiple? 'divisiones' : 'division_id';
        }
        $result .= Form::select($name, auth()->user()->select_divisiones(), ['label' => Settings::get('general.titulo_division'), 'id' => $id, 'multiple' => $multiple], !$multiple);
    } else {
        $result = '';
    }
    return $result;
}

/**
 * Obtiene la id de división del usuario
 * 
 * @param bool $multiple
 * @return int
 */
function get_division_id($multiple = FALSE) {
    $name = $multiple? 'divisiones' : 'division_id';
    return request($name)?: auth()->user()->divisiones()->first()->id;
}

/**
 * Genera select de destinos
 * 
 * @return string select destinos
 */
function select_destino() {
    $result = '';
    if (Settings::get('mod_bodega.activo')) {
        $result = Form::select('destino', ['Inventario', 'Bodega']);
    }
    return $result;
}

/**
 * Obtiene el destino
 * 
 * @return string
 */
function get_destino() {
    return request('destino')?: Settings::get('general.destino_oc_defecto');
}

/**
 * Agrega puntos y guión a un rut
 * 
 * @access public
 * @param string $rut el rut sin puntos ni guión
 * @return string el rut formateado
 */
function rut($rut) {
    $rut = str_replace(['.', '-'], '', $rut);
    return number_format(substr($rut, 0, -1), 0, "", ".") . '-' . strtoupper(substr($rut, strlen($rut) - 1, 1));
}

/**
 * Obtiene versión
 * 
 * @return string version
 */
function get_version() {
    $version_file = base_path() . '/version';
    // Si existe un archivo de versión, retornar su contenido
    if (file_exists($version_file)) {
        return trim(file_get_contents($version_file));
    }
    // Recuerda el directorio actual
    $dir = getcwd();
    // Cambia a directorio base
    chdir(base_path());
    // Obtiene versión desde git
    $output = shell_exec('git describe --always --tags --dirty');
    
    if ($output === null) {
        $output = 'versión no disponible';
    }
    
    return trim($output);
}

/**
 * Formatea un valor a moneda
 * @param  int $valor
 * @return string valor formateado
 */
function moneda($valor) {
    return '$' . number_format($valor, 0, ',', '.');
}

/**
 * Determina si un usuario tiene o no un permiso
 * @param $permiso
 * @return boolean
 */
function can($permiso) {
    return Auth::user()->can($permiso);
}

/**
 * array_column not exist in PHP 5.4
 */
if (! function_exists('array_column')) {
    function array_column(array $input, $columnKey, $indexKey = null) {
        $array = array();
        foreach ($input as $value) {
            if ( !array_key_exists($columnKey, $value)) {
                //trigger_error("Key \"$columnKey\" does not exist in array");
                //return false;
                continue;
            }
            if (is_null($indexKey)) {
                $array[] = $value[$columnKey];
            }
            else {
                if ( !array_key_exists($indexKey, $value)) {
                    //trigger_error("Key \"$indexKey\" does not exist in array");
                    //return false;
                    continue;
                }
                if ( !is_scalar($value[$indexKey])) {
                    trigger_error("Key \"$indexKey\" does not contain scalar value");
                    return false;
                }
                $array[$value[$indexKey]] = $value[$columnKey];
            }
        }
        return $array;
    }
}

