<?php

namespace kernel;

class CgView
{
    public string $viewPath = '';

    public string $layoutPath = '';
    public array $varToLayout = [];
    public bool|string $layout = false;

    public function __construct()
    {

    }

    public function render(string $view, array $data = []): void
    {
        $content = $this->createContent($view, $data);

        echo $content;
    }

    public function fetch(string $view, array $data = []): false|string
    {
        $content = $this->createContent($view, $data);

        return $content;
    }

    public function addVarToLayout($key, $value): void
    {
        $this->varToLayout[$key] = $value;
    }

    private function createContent(string $view, array $data = []): false|string
    {
        ob_start();
        foreach ($data as $key => $datum) {
            ${"$key"} = $datum;
        }

        include($this->viewPath . $view);

        $content = ob_get_contents();
        ob_end_clean();

        ob_start();

        $file_content = $content;

        $layoutPath = $this->viewPath;

        if ($this->layout) {

            if ($this->layoutPath !== '') {

                $layoutPath = $this->layoutPath;
            }
            if (file_exists($layoutPath . $this->layout)) {
                if ($this->varToLayout){
                    foreach ($this->varToLayout as $key => $datum) {
                        ${"$key"} = $datum;
                    }
                }
                include($layoutPath . $this->layout);
                $file_content = ob_get_contents();
            }
        }

        ob_end_clean();

        return $file_content;
    }

}