<?php
/*
 * Copyright © 2021 ExacTI Technology Solutions. All rights reserved.
 * GPLv3 General License.
 * https://exacti.com.br
 * Phacil PHP Framework - https://github.com/exacti/phacil-framework
 */

namespace Phacil\Framework;

use Phacil\Framework\Registry;

/** 
 * Abstract class for helpers
 * 
 * @package Phacil\Framework 
 * @abstract
 * @api
 */
abstract class AbstractHelper implements \Phacil\Framework\Interfaces\Helper {
	
	/**
	 * 
	 * @var Registry
	 */
	protected $registry;
	
	/**
	 * @param Registry $registry 
	 * @return void 
	 */
	public function __construct(Registry $registry = NULL) {
		if (!$registry) {
			/**
			 * @var \Phacil\Framework\Registry
			 */
			$registry = \Phacil\Framework\Registry::getInstance();
		}
		$this->registry = &$registry;
	}

	/** @return void  */
	private function __getRegistryClass()
	{
		$this->registry = \Phacil\Framework\startEngineExacTI::getRegistry();
	}

	/**
	 * 
	 * {@inheritdoc}
	 */
	static public function getInstance()
	{
		$class = get_called_class();
		return \Phacil\Framework\Registry::getAutoInstance((new $class()));
	}

	/**
	 * 
	 * @param mixed $key 
	 * @return mixed 
	 */
	public function __get($key)
	{
		if (!$this->registry) {
			$this->__getRegistryClass();
		}

		return $this->registry->get($key);
	}

	/**
	 * 
	 * @param mixed $key 
	 * @param mixed $value 
	 * @return void 
	 */
	public function __set($key, $value)
	{
		if (!$this->registry) {
			$this->__getRegistryClass();
		}

		$this->registry->set($key, $value);
	}
}