<?php

declare(strict_types=1);

namespace App\Framework\Http;

use App\Framework\Http\Cookies\Cookies;
use App\Framework\Router\ValueObjects\RouteParameters;

interface Request
{
    public Headers $headers { get; }

    public RequestId $id {get; }

    public string $body { get; }

    public Method $method { get; }

    /** @var array<string, string> */
    public array $queryParams { get; }

    public string $path { get; }

    public Cookies $cookies { get; }

    public ServerEnvironment $server {get;}

    public RequestBody $parsedBody {get;}

    public UploadedFiles $files {get;}

    public RouteParameters $routeParameters {get;}

    public Query $query {get;}

    /**
     * Get query parameter value
     * @deprecated use $request->query->get() instead
     */
    public function getQuery(string $key, mixed $default = null): mixed;
}
