#!/usr/bin/php
<?php

namespace wakeup_call;

require_once('/usr/share/ombutel/www/includes/cli.php');

use ombutel\db;
use ombutel\extension;
use ombutel\wakeup_call;

if ($argc > 1) {
	switch ($argv[1]) {
		case 'create': return create();
		case 'next': return pending();
		case 'remove': return remove();
		case 'snooze': return snooze();
		case 'answered': return answered();
		case 'hangup': return hangup();
	}
}

function create() {
	global $argc, $argv;
	if ($argc > 4) {
		db::begin_transaction();
		if ($extension = extension::find_by_extension($argv[2])) {
			$wakeup_call = new wakeup_call();
			$wakeup_call->extension_id = $extension->extension_id;
			$wakeup_call->when = $argv[3];
			$wakeup_call->daily = !!$argv[4];
			if ($wakeup_call->valid($errors)) {
				$wakeup_call->save();
				db::commit();
			}
		}
	}
}

function pending() {
	global $argc, $argv;
	if ($argv > 2) {
		if ($extension = extension::find_by_extension($argv[2])) {
			$wakeup_calls = wakeup_call::search(
				'extension_id = ? and when > ?',
				$extension->extension_id,
				time()
			);
			usort($wakeup_calls, function($left, $right) {
				return $left->when - $right->when;
			});
			foreach ($wakeup_calls as $wakeup_call) {
				echo $wakeup_call->when;
				return;
			}
		}
	}
}

function remove() {
	global $argc, $argv;
	if ($argc > 3) {
		db::begin_transaction();
		if ($extension = extension::find_by_extension($argv[2])) {
			$wakeup_calls = wakeup_call::search(
				'extension_id = ? and when = ?',
				$extension->extension_id, $argv[3]
			);
			foreach ($wakeup_calls as $wakeup_call) {
				$wakeup_call->delete();
			}
			db::commit();
		}
	}
}

function snooze() {
	global $argc, $argv;
	if ($argc > 3) {
		db::begin_transaction();
		if ($wakeup_call = wakeup_call::get($argv[2])) {
			$wakeup_call->snooze($argv[3]);
			db::commit();
		}
	}
}

function answered() {
	global $argc, $argv;
	if ($argc > 2) {
		db::begin_transaction();
		if ($wakeup_call = wakeup_call::get($argv[2])) {
			$wakeup_call->answered();
			db::commit();
		}
	}
}

function hangup() {
	global $argc, $argv;
	if ($argc > 2) {
		db::begin_transaction();
		if ($wakeup_call = wakeup_call::get($argv[2])) {
			$wakeup_call->hangup();
			db::commit();
		}
	}
}

?>
