<?php

require_once('external.php');

function toXML($data)
{
	$xml = new XmlWriter();
	$xml->openMemory();
	$xml->startDocument('1.0', 'UTF-8');
	$xml->startElement('root');

	function write(XMLWriter $xml, $data)
	{
		foreach($data as $key => $value)
		{
			if(is_array($value))
			{
				echo "$key\n";
				$xml->startElement($key);
				write($xml, $value);
				$xml->endElement();
				continue;
			}
			$xml->writeElement($key, $value);
		}
	}
	write($xml, $data);

	$xml->endElement();
	return $xml->outputMemory(true);
}

$API = new ReflectionClass('MTAPIi');

if( $API->hasMethod($_GET['method']) ) {
	$method = $API->getMethod($_GET['method']);
	$parameters = $method->getParameters();

	$method_parameters = Array();
	foreach($parameters as $parameter) {
		$param = (Array) $parameter;
		$parameter_name = reset($param);
		if(isset( $_GET[$parameter_name] ))
			array_push($method_parameters, $_GET[$parameter_name]);
		elseif( 'xml' == $parameter->getName() && 'xml' == $_GET['output-type'] )
			array_push($method_parameters, true);
		elseif( $parameter->isOptional() )
			{ /* empty */ }
		else {
			header('HTTP/1.0 400 Bad Request');
			printf( 'Parameter %s is required but not supplied', $parameter_name );
		}
	}

	$result = $method->invokeArgs($API, $method_parameters);

	switch($_GET['output-type']) {
		case 'json':
			$result = json_encode($result);
			header('Content-Type: application/json');
			echo $result;
			break;
		case 'xml':
			header('Content-Type: application/xml');
			echo $result;
			break;
		default:
			header('HTTP/1.0 400 Bad Request');
			header('Content-Type: text/plain');
			print_r($result);
			break;
	}
} else {
	header('HTTP/1.0 404 Not Found');
	echo 'There is no such method in the MT API.';
}

?>
