<?php

declare(strict_types=1);

namespace Doctrine\RST\References;

use Doctrine\RST\Environment;

final class Doc extends Reference
{
    /** @var string */
    private $name;

    /** @var Resolver */
    private $resolver;

    /**
     * Used with "ref" - it means the dependencies added in found()
     * must be resolved to their final path later (they are not
     * already document names).
     *
     * @var bool
     */
    private $dependenciesMustBeResolved;

    public function __construct(string $name = 'doc', bool $dependenciesMustBeResolved = false)
    {
        $this->name                       = $name;
        $this->resolver                   = new Resolver();
        $this->dependenciesMustBeResolved = $dependenciesMustBeResolved;
    }

    public function getName(): string
    {
        return $this->name;
    }

    public function resolve(Environment $environment, string $data): ?ResolvedReference
    {
        return $this->resolver->resolve($environment, $data);
    }

    public function found(Environment $environment, string $data): void
    {
        $environment->addDependency($data, $this->dependenciesMustBeResolved);
    }
}