<?php
/**
 * Name: Converter App
 * Description: Unit converter application
 * Version: 1.0
 * Author: Mike Macgirvin <http://macgirvin.com/profile/mike>
 */
use Friendica\Core\Addon;

function convert_install() {
	Addon::registerHook('app_menu', 'addon/convert/convert.php', 'convert_app_menu');
}

function convert_uninstall() {
	Addon::unregisterHook('app_menu', 'addon/convert/convert.php', 'convert_app_menu');
}

function convert_app_menu($a,&$b) {
	$b['app_menu'][] = '<div class="app-title"><a href="convert">Units Conversion</a></div>';
}


function convert_module() {}







function convert_content($app) {

include("UnitConvertor.php");

 class TP_Converter extends UnitConvertor {
	function TP_Converter($lang = "en")
	{
		if ($lang != 'en' ) {
			$dec_point = '.'; $thousand_sep = "'";
		} else {
			$dec_point = '.'; $thousand_sep = ",";
		}

		$this->UnitConvertor($dec_point , $thousand_sep );

	} // end func UnitConvertor

	function find_base_unit($from,$to) {
		while (list($skey,$sval) = each($this->bases)) {
				if ($skey == $from || $to == $skey || in_array($to,$sval) || in_array($from,$sval)) {
					return $skey;
				}
		}
		return false;
	}

	function getTable($value, $from_unit, $to_unit, $precision) {

		if ($base_unit = $this->find_base_unit($from_unit,$to_unit)) {

			// A baseunit was found now lets convert from -> $base_unit

				$cell ['value'] = $this->convert($value, $from_unit, $base_unit, $precision)." ".$base_unit;
				$cell ['class']	= ($base_unit == $from_unit || $base_unit == $to_unit) ? "framedred": "";
				$cells[] = $cell;
			// We now have the base unit and value now lets produce the table;
			while (list($key,$val) = each($this->bases[$base_unit])) {
				$cell ['value'] = $this->convert($value, $from_unit, $val, $precision)." ".$val;
				$cell ['class']	= ($val == $from_unit || $val == $to_unit) ? "framedred": "";
				$cells[] = $cell;
			}

			$cc = count($cells);
			$string = "<table class=\"framed grayish\" border=\"1\" cellpadding=\"5\" width=\"80%\" align=\"center\"><tr>";
			$string .= "<td rowspan=\"$cc\" align=\"center\">$value $from_unit</td>";
			$i=0;
			foreach ($cells as $cell) {
				if ($i==0) {
					$string .= "<td class=\"".$cell['class']."\">".$cell['value']."</td>";
					$i++;
				} else {
					$string .= "</tr><tr><td class=\"".$cell['class']."\">".$cell['value']."</td>";
				}
			}
			$string .= "</tr></table>";
			return $string;
		}

	}
}


$conv = new TP_Converter('en');


$conversions = [
	'Temperature'=>['base' =>'Celsius',
		'conv'=>[
			'Fahrenheit'=>['ratio'=>1.8, 'offset'=>32],
			'Kelvin'=>['ratio'=>1, 'offset'=>273],
			'Reaumur'=>0.8
		]
	],
	'Weight' => ['base' =>'kg',
		'conv'=>[
			'g'=>1000,
			'mg'=>1000000,
			't'=>0.001,
			'grain'=>15432,
			'oz'=>35.274,
			'lb'=>2.2046,
			'cwt(UK)'	=> 0.019684,
			'cwt(US)'	=> 0.022046,
			'ton (US)'	=> 0.0011023,
			'ton (UK)'	=> 0.0009842
		]
	],
	'Distance' => ['base' =>'km',
		'conv'=>[
			'm'=>1000,
			'dm'=>10000,
			'cm'=>100000,
			'mm'=>1000000,
	 		'mile'=>0.62137,
			'naut.mile'=>0.53996,
	 		'inch(es)'=>39370,
			'ft'=>3280.8,
			'yd'=>1093.6,
			'furlong'=>4.970969537898672,
			'fathom'=>546.8066491688539
		]
	],
	'Area' => ['base' =>'km 2',
		'conv'=>[
			'ha'=>100,
			'acre'=>247.105,
			'm 2'=>pow(1000,2),
			'dm 2'=>pow(10000,2),
			'cm 2'=>pow(100000,2),
			'mm 2'=>pow(1000000,2),
			'mile 2'=>pow(0.62137,2),
			'naut.miles 2'=>pow(0.53996,2),
	 		'in 2'=>pow(39370,2),
			'ft 2'=>pow(3280.8,2),
			'yd 2'=>pow(1093.6,2),
		]
	],
	'Volume' => ['base' =>'m 3',
		'conv'=>[
			'in 3'=>61023.6,
			'ft 3'=>35.315,
			'cm 3'=>pow(10,6),
	 		'dm 3'=>1000,
			'litre'=>1000,
			'hl'=>10,
			'yd 3'=>1.30795,
	 		'gal(US)'=>264.172,
			'gal(UK)'=>219.969,
			'pint' => 2113.376,
			'quart' => 1056.688,
			'cup' => 4266.753,
			'fl oz' => 33814.02,
			'tablespoon' => 67628.04,
			'teaspoon' => 202884.1,
			'pt (UK)'=>1000/0.56826,
			'barrel petroleum'=>1000/158.99,
			'Register Tons'=>2.832,
			'Ocean Tons'=>1.1327
		]
	],
	'Speed'	=>['base' =>'kmph',
		'conv'=>[
			'mps'=>0.0001726031,
			'milesph'=>0.62137,
			'knots'=>0.53996,
			'mach STP'=>0.0008380431,
			'c (warp)'=>9.265669e-10
		]
	]
];


while (list($key,$val) = each($conversions)) {
	$conv->addConversion($val['base'], $val['conv']);
	$list[$key][] = $val['base'];
	while (list($ukey,$uval) = each($val['conv'])) {
		$list[$key][] = $ukey;
	}
}

  $o .= '<h3>Unit Conversions</h3>';


	if (isset($_POST['from_unit']) && isset($_POST['value'])) {
    	$_POST['value'] = $_POST['value'] + 0;


		$o .= ($conv->getTable($_POST['value'], $_POST['from_unit'], $_POST['to_unit'], 5))."</p>";
	} else {
		$o .= "<p>Select:</p>";
	}

	if(isset($_POST['value']))
		$value = $_POST['value'];
	else
		$value = '';

	$o .= '<form action="convert" method="post" name="conversion">';
    $o .= '<input name="value" type="text" id="value" value="' . $value . '" size="10" maxlength="10" />';
    $o .= '<select name="from_unit" size="12">';



	reset($list);
	while(list($key,$val) = each($list)) {
		$o .=  "\n\t<optgroup label=\"$key\">";
		while(list($ukey,$uval) = each($val)) {
			$selected = (($uval == $_POST['from_unit']) ? ' selected="selected" ' : '');
			$o .=  "\n\t\t<option value=\"$uval\" $selected >$uval</option>";
		}
		$o .= "\n\t</optgroup>";
	}

	$o .= '</select>';

    $o .= '<input type="submit" name="Submit" value="Submit" /></form>';

	return $o;
}