<?php

/**
 * Description of Core
 *
 * @author Arkadiusz Rychlik <a.rychlik at eppe.com.pl>
 */
class Rtn_RB_Core {

	static $config;

	static function setup() {
		$dbc = new Zend_Config_Ini(APPLICATION_PATH . 'configs/database.ini', APPLICATION_ENV);
		$dsn = "mysql:host={$dbc->host};dbname={$dbc->dbname}";
		R::setup($dsn, $dbc->username, $dbc->password);

		static::$config = $dbc;

		static::chillBeans();
		static::initCustomModelsFormatter();
		static::extendRB();
	}

	protected static function initCustomModelsFormatter() {
		RedBean_ModelHelper::setModelFormatter(new Rtn_RB_ModelFormatter());
	}

	protected static function chillBeans() {
		R::freeze([
			'resource',
			'role',
			'user'
		]);
	}

	protected static function extendRB() {
		R::ext('findOneOrDispense', function($type, $sql = NULL, $bindings = array()) {
			return Rtn_RB_Core::findOneOrDispese($type, $sql, $bindings);
		});
	}

	public static function findOneOrDispese($type, $sql = NULL, $bindings = array()) {
		$bean = R::findOne($type, $sql, $bindings);
		if (!$bean) {
			$bean = R::dispense($type);
		}
		return $bean;
	}

	public static function getQueriesLogAsString() {
		$queriesString = '<ul>';
		foreach (array_reverse(Zend_Registry::get('queryLogger')->getLogs()) as $query) {
			$queriesString .= '<li>' . $query . '<li>';
		}
		$queriesString .= '</ul>';
		
		return $queriesString;
	}

}
