<?php

namespace MintyPHP\Http;

class RequestRuntime implements RequestRuntimeInterface
{
    public function method(): string
    {
        $method = strtoupper(trim((string) ($this->context()['method'] ?? '')));
        if ($method === '') {
            return 'GET';
        }

        return substr($method, 0, 8);
    }

    public function path(): string
    {
        return trim((string) ($this->context()['path'] ?? ''));
    }

    public function ip(): string
    {
        return trim((string) ($this->context()['ip'] ?? ''));
    }

    public function userAgent(): string
    {
        return trim((string) ($this->context()['user_agent'] ?? ''));
    }

    /**
     * @return array<string, mixed>
     */
    public function queryParams(): array
    {
        /** @var array<string, mixed> $query */
        $query = $_GET;
        return $query;
    }

    public function isSecure(): bool
    {
        $https = strtolower(trim((string) ($_SERVER['HTTPS'] ?? '')));
        if (in_array($https, ['on', '1', 'true'], true)) {
            return true;
        }

        $forwarded = strtolower(trim((string) ($_SERVER['HTTP_X_FORWARDED_PROTO'] ?? '')));
        if ($forwarded === '') {
            return false;
        }

        $parts = explode(',', $forwarded);
        return trim((string) ($parts[0] ?? '')) === 'https';
    }

    /**
     * @return array<string, mixed>
     */
    private function context(): array
    {
        RequestContext::ensureStarted();
        return RequestContext::context();
    }
}
