<?php

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

	static $moduleName = '';
	static $initers = array();

	static function nuke(){
		R::nuke();
	}
	
	static function init($what='all') {
		
		if(is_array($what)){
			$what = array_shift($what);
		}
		if($what == 'all'){
			$iterate = static::$initers;
		}
		else{
			$iterate[] = $what;
		}
		
		foreach ($iterate as $initer) {
			echo "\n" . static::$moduleName . "\t" . $initer . " ... ";
			$initer_class = static::$moduleName . '_Module_Initer_' . $initer;

			if (!class_exists($initer_class)) {
				$initer_class = 'Main_' . $initer_class;
			}

			$initer_class::init();
			echo "Done\n";
		}
	}

	static function initAllEnabled($what='all') {
		$modules = Rtn_Application::$config->resources->modules->toArray();

		foreach ($modules as $module) {
			$initer_class = $module . '_Module_Initer';

			if (!class_exists($initer_class)) {
				$initer_class = 'Main_' . $initer_class;
			}

			if (class_exists($initer_class)) {
				$initer_class::init($what);
			} else {
				Rtn_Cli::writeln(__('Warning! No initer class `:class` for module `:module`', array(':class' => $initer_class, ':module' => $module)));
			}
		}
	}

	static function initSingle($modname) {
		$modname = reset($modname);
		$initer_class = $modname . '_Module_Initer';

		if (!class_exists($initer_class)) {
			$initer_class = 'Main_' . $initer_class;
		}

		if (class_exists($initer_class)) {
			$initer_class::init();
		} else {
			Rtn_Cli::writeln(__('Warning! No initer class `:class` for module `:module`', array(':class' => $initer_class, ':module' => $modname)));
		}
	}

	/**
	 * @return bool Czy tabela 'resource' istnieje
	 */
	static function tableExists($tblname) {
		$dbname = Rtn_RB::$config->dbname;
		$sql = "SELECT 1 FROM `INFORMATION_SCHEMA`.`TABLES` WHERE `TABLE_NAME` = '$tblname' AND `TABLE_SCHEMA` = '$dbname'";
		return (bool) R::exec($sql);
	}

	/**
	 * @return bool Czy index w tabeli istnieje
	 */
	static function indexExists($tblname, $idxname) {
		$dbname = Rtn_RB::$config->dbname;
		$sql = "SELECT 1 FROM `INFORMATION_SCHEMA`.`TABLE_CONSTRAINTS` WHERE `CONSTRAINT_NAME` = '$idxname' AND `TABLE_NAME` = '$tblname' AND `TABLE_SCHEMA` = '$dbname'";
		return (bool) R::exec($sql);
	}

}
