<?php
	/** Test server for assignment a1.  Currencies are fixed. */
	
	ini_set('display_errors', 0);
	ini_set('error_reporting', E_ERROR);
	$path = '../../currency';
	
	// Load JSON data from a file
	function load_json($file) {
		$string = file_get_contents($file);
		$jdata  = json_decode($string, true, 512);
		return $jdata;
	}
	
	// Tests if currency exists
	function is_currency($code,$currencies) {
		return $currencies[$code] != null;
	}

	// Get the exchange rate for 1 unit.
	function get_rate($code,$conversion) {
		$tmp = $conversion["rates"][$code];
		return ($tmp == null ? -1 : floatval($tmp));
	}
	
	// Process a currency query
	function process_query($src, $dst, $amt) {
		global $path;		
		$CURRENCIES = load_json("${path}/currency.json");
		$CONVERSION = load_json("${path}/snapshot.json");
		
		// Construct answer JSON
		$answer = array();
		$answer['valid'] = true;
		$answer['src'] = '';
		$answer['dst'] = '';
		$answer['error'] = '';
		
		// Verify if query is valid.
		if ($src == '' || !is_currency($src,$CURRENCIES)) {
			$answer['error'] = 'Source currency code is invalid.';
			$answer['valid'] = false;
		} else if ($dst == '' || !is_currency($dst,$CURRENCIES)) {
			$answer['error'] = 'Exchange currency code is invalid.';
			$answer['valid'] = false;
		} else if (!is_numeric($amt)) {
			$answer['error'] = 'Currency amount is invalid.';
			$answer['valid'] = false;
		}

		// One more round of error checking (OpenExchange query failure)
		if ($answer['valid']) {
			$lamt = floatval($amt);
			$srate = get_rate($src,$CONVERSION);
			$drate = get_rate($dst,$CONVERSION);
		
			if ($srate == -1) {
				$answer['error'] = "Quote for currency ${src} not present.";
				$answer['valid'] = false;
			} else if ($drate == -1) {
				$answer['error'] = "Quote for currency ${dst} not present.";
				$answer['valid'] = false;
			}
		}
				
		// Valid answer
		if ($answer['valid']) {
			$ramt = $lamt*$drate/$srate; // Defined in previous block
			$sname = $CURRENCIES[$src][$lamt == 1 ? 0 : 1];
			$dname = $CURRENCIES[$dst][$ramt == 1 ? 0 : 1];

			$answer['src'] = "${lamt} ${sname}";
			$answer['dst'] = "${ramt} ${dname}";
		}
		
		// Encode manually because PHP sucks
		$succ = $answer['valid'] ? 'true' : 'false';
		$src  = "\"${answer['src']}\"";
		$dst  = "\"${answer['dst']}\"";
		$err  = "\"${answer['error']}\"";

		$result = "{ \"src\":${src}, \"dst\":${dst}, \"valid\":${succ}, \"err\":${err} }";
		return $result;
	}

	// Process the URL query
	$src = isset($_GET['from']) ? $_GET['from'] : '';
	$dst = isset($_GET['to'])   ? $_GET['to']   : '';
	$amt = isset($_GET['amt'])  ? $_GET['amt']  : '';
	echo process_query($src, $dst, $amt);
?>
