<?php

declare(strict_types=1);

namespace Doctrine\RST\Templates;

use Doctrine\RST\Configuration;
use Twig\Environment as TwigEnvironment;

final class TwigAdapter implements TemplateEngineAdapter
{
    /** @var Configuration */
    private $configuration;

    /** @var TwigEnvironment */
    private $twigEnvironment;

    public function __construct(Configuration $configuration)
    {
        $this->configuration = $configuration;
    }

    public function getTemplateEngine(): TwigEnvironment
    {
        if ($this->twigEnvironment === null) {
            $this->twigEnvironment = TwigEnvironmentFactory::createTwigEnvironment($this->configuration);
        }

        return $this->twigEnvironment;
    }

    /** @param mixed[] $parameters */
    public function render(string $template, array $parameters = []): string
    {
        return $this->getTemplateEngine()->render($template, $parameters);
    }
}
