<?php
/*
 * Template Engine Wrapper
 */

namespace Sakura;

use Twig_Loader_Filesystem;
use Twig_Environment;
use Twig_Extension_StringLoader;

class Templates {

    // Engine container, template folder name and options
    public static $_ENG;
    public static $_TPL;
    public static $_CFG;

    // Initialise templating engine and data
    public static function init($template) {

        // Set template folder name
        self::$_TPL = $template;

        // Assign config path to a variable so we don't have to type it out twice
        $confPath = ROOT .'_sakura/templates/'. self::$_TPL .'/template.ini';

        // Check if the configuration file exists
        if(!file_exists($confPath)) {

            trigger_error('Template configuration does not exist', E_USER_ERROR);

        }

        // Parse and store the configuration
        self::$_CFG = parse_ini_file($confPath, true);

        // Make sure we're not using a manage template for the main site or the other way around
        if(defined('SAKURA_MANAGE') && (bool)self::$_CFG['manage']['mode'] != (bool)SAKURA_MANAGE) {

            trigger_error('Incorrect template type', E_USER_ERROR);

        }

        // Start Twig
        self::twigLoader();

    }

    // Twig Loader
    private static function twigLoader() {

        // Initialise Twig Filesystem Loader
        $twigLoader = new Twig_Loader_Filesystem(ROOT .'_sakura/templates/'. self::$_TPL);

        // Environment variable
        $twigEnv = [];

        // Enable caching
        if(Configuration::getConfig('enable_tpl_cache'))
            $twigEnv['cache'] = ROOT .'cache';

        // And now actually initialise the templating engine
        self::$_ENG = new Twig_Environment($twigLoader, $twigEnv);

        // Load String template loader
        self::$_ENG->addExtension(new Twig_Extension_StringLoader());

    }

    // Render template
    public static function render($file, $tags) {

        return self::$_ENG->render($file, $tags);

    }

}