<?php

declare(strict_types=1);

namespace DigiComp\FlowTranslationEndpoint\Http;

use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\MiddlewareInterface;
use Psr\Http\Server\RequestHandlerInterface;

class ReplaceGetTranslationRequest implements MiddlewareInterface
{
    /**
     * @var string
     */
    protected string $headerName;

    /**
     * @var string|null
     */
    protected ?string $reactOnPath;

    /**
     * @var string
     */
    protected string $translateGetParam;

    /**
     * @param string $headerName
     * @param string|null $reactOnPath
     * @param string $translateGetParam
     */
    public function __construct(string $headerName, ?string $reactOnPath, string $translateGetParam)
    {
        $this->headerName = $headerName;
        $this->reactOnPath = $reactOnPath;
        $this->translateGetParam = $translateGetParam;
    }

    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
    {
        if ($this->reactOnPath !== null && $request->getUri()->getPath() === $this->reactOnPath) {
            $request = $request->withAddedHeader(
                $this->headerName,
                $request->getQueryParams()[$this->translateGetParam] ?? ''
            );
        }
        return $handler->handle($request);
    }
}