#!/usr/bin/php
<?php

if (file_exists($filename = __DIR__ . '/../includes/cli.php')) {
	require_once($filename);
} else {
	require_once(__DIR__ . '/../www/includes/cli.php');
}

use ombutel\db;
use ombutel\trunk;

// FIXME

function abort($message) {
	echo $message;
	exit(1);
}

function edit_trunk($name, $params) {
	$param_types = [ 'peer', 'user', 'friend' ];
	if ($trunk = trunk::find_by_description($name)) {
		$trunk->parameters = $trunk->parameters(); // load current values
		foreach ($params as $param) {
			if (count($name_value = explode('=', $param, 2)) > 1) {
				list($name, $value) = $name_value;
				if (property_exists($trunk, $name)) {
					$trunk->{$name} = $value; // set generic properties
				} else if (count($type_name = explode(',', $name, 2)) > 1) {
					// set advanced properties
					list ($type, $name) = $type_name;
					if (!in_array($type, $param_types)) {
						abort("Invalid type\n");
					} else if ($name == '') {
						abort("Invalid parameter\n");
					} else {
						// last value overrides previous values on save
						$trunk->parameters[] = (object) [
							'type' => $type,
							'param' => $param,
							'value' => $value,
							'enabled' => true,
						];
					}
				} else {
					abort("Invalid parameter\n");
				}
			} else {
				abort("Syntax error\n");
			}
		}
		$trunk->save();
	} else {
		abort("Trunk does not exist\n");
	}
}

if ($argc > 1) {
	try {
		db::begin_transaction();
		edit_trunk($argv[1], array_slice($argv, 2));
		db::commit();
	} catch (Exception $e) {
		abort("{$e->getMessage()}\n");
	}
} else {
	abort("Usage: {$argv[0]} name [param=value [...]]\n");
}

?>
