<?php
/**
 * @copyright Copyright (c) 2010, The volkszaehler.org project
 * @package default
 * @license http://www.opensource.org/licenses/gpl-license.php GNU Public License
 */
/*
 * This file is part of volkzaehler.org
 *
 * volkzaehler.org is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * any later version.
 *
 * volkzaehler.org is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with volkszaehler.org. If not, see <http://www.gnu.org/licenses/>.
 */

namespace Volkszaehler\Controller;

use Volkszaehler\Model;
use Volkszaehler\Util;
use Volkszaehler\View;

/**
 * Capabilities controller
 *
 * @author Steffen Vogel <info@steffenvogel.de>
 * @package default
 */
class CapabilitiesController extends Controller {

	/**
	 * @todo
	 * @param string $capabilities
	 * @param string $sub
	 */
	public function get($section = NULL) {
		$capabilities = array();
		
		if (is_null($section) || $section == 'configuration') {
			$configuration = array(
				'precission' => View\View::PRECISSION,
				'database' => Util\Configuration::read('db.driver'),
				'debug' => Util\Configuration::read('debug'),
				'devmode' => Util\Configuration::read('devmode')
			);
			
			$capabilities['configuration'] = $configuration;
		}
		
		if (is_null($section) || $section == 'statistics') { // TODO database statistics
			$statistics = array();

			if ($load = Util\Debug::getLoadAvg()) $statistics['load'] = $load;
			if ($uptime = Util\Debug::getUptime()) $statistics['uptime'] = $uptime*1000;
			if ($commit = Util\Debug::getCurrentCommit()) $statistics['commit-hash'] = $commit;

			$capabilities['statistics'] = $statistics;
		}
		
		if (is_null($section) || $section == 'formats') {
			$capabilities['formats'] = array_keys(\Volkszaehler\Router::$viewMapping);
		}
		
		if (is_null($section) || $section == 'contexts') {
			$capabilities['contexts'] = array_keys(\Volkszaehler\Router::$controllerMapping);
		}
		
		if (is_null($section) || $section == 'definitions') {
			if (!is_null($section)) { // only caching when we doesn't request dynamic informations
				$this->view->setCaching('expires', time()+2*7*24*60*60); // cache for 2 weeks
			}
			
			$capabilities['definitions']['entities'] = \Volkszaehler\Definition\EntityDefinition::getJSON();
			$capabilities['definitions']['properties'] = \Volkszaehler\Definition\PropertyDefinition::getJSON();
		}
		
		if (count($capabilities) == 0) {
			throw new \Exception('Invalid capability identifier!');
		}
		
		return array('capabilities' => $capabilities);
	}
}

?>