<?php

namespace Miniflux\Request;

function get_server_variable($variable)
{
    return isset($_SERVER[$variable]) ? $_SERVER[$variable] : '';
}

function param($name, $default_value = null)
{
    return isset($_GET[$name]) ? $_GET[$name] : $default_value;
}

function int_param($name, $default_value = 0)
{
    return isset($_GET[$name]) && ctype_digit($_GET[$name]) ? (int) $_GET[$name] : $default_value;
}

function value($name)
{
    $values = values();
    return isset($values[$name]) ? $values[$name] : null;
}

function values()
{
    if (! empty($_POST)) {
        return $_POST;
    }

    $result = json_decode(body(), true);

    if ($result) {
        return $result;
    }

    return array();
}

function body()
{
    return file_get_contents('php://input');
}

function file_content($field)
{
    if (isset($_FILES[$field])) {
        return file_get_contents($_FILES[$field]['tmp_name']);
    }

    return '';
}

function uri()
{
    return $_SERVER['REQUEST_URI'];
}

function is_post()
{
    return $_SERVER['REQUEST_METHOD'] === 'POST';
}

function get_user_agent()
{
    return get_server_variable('HTTP_USER_AGENT') ?: 'Unknown';
}

function get_ip_address()
{
    $keys = array(
        'HTTP_X_REAL_IP',
        'HTTP_CLIENT_IP',
        'HTTP_X_FORWARDED_FOR',
        'HTTP_X_FORWARDED',
        'HTTP_X_CLUSTER_CLIENT_IP',
        'HTTP_FORWARDED_FOR',
        'HTTP_FORWARDED',
        'REMOTE_ADDR'
    );

    foreach ($keys as $key) {
        $value = get_server_variable($key);
        if ($value !== '') {
            foreach (explode(',', $value) as $ip_address) {
                return trim($ip_address);
            }
        }
    }

    return 'Unknown';
}