<?php
declare(strict_types=1);

namespace Mcp;

use Mcp\Util\TemplateVarArray;

class TemplateBuilder
{

    private string $basedir;
    private string $name;
    private ?string $parent = null;
    private array $vars = [];

    public function __construct(string $basedir, string $name)
    {
        $this->basedir = $basedir;
        $this->name = $name;
    }

    public function parent(string $parent): TemplateBuilder
    {
        $this->parent = $parent;
        return $this;
    }

    public function vars(array $vars): TemplateBuilder
    {
        foreach ($vars as $key => $val) {
            $this->vars[$key] = htmlspecialchars(strval($val));
        }
        return $this;
    }

    public function var(string $key, string $val): TemplateBuilder
    {
        $this->vars[$key] = htmlspecialchars($val);
        return $this;
    }

    public function unsafeVar(string $key, string $val): TemplateBuilder
    {
        $this->vars[$key] = $val;
        return $this;
    }

    public function render(): void
    {
        $v = new TemplateVarArray($this->vars);
        $basepath = $this->basedir.DIRECTORY_SEPARATOR;
        if ($this->parent == null) {
            require $basepath.$this->name;
        } else {
            $v['child-template'] = $basepath.$this->name;
            require $basepath.$this->parent;
        }
    }
}