#!/usr/bin/php
<?php

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

use ombutel\ami;
use ombutel\db;
use ombutel\extension;
use ombutel\queue_member;

if ($argc > 1) {
	delete_extension(array_slice($argv, 1));
} else {
	die("Usage: {$argv[0]} extension [extension...]\n");
}

function delete_extension($extension_numbers) {
	foreach ($extension_numbers as $extension_number) {
		try {
			db::begin_transaction();
			if ($extension = extension::find_by_extension($extension_number)) {
				delete_portal_user($extension);
				delete_queue_members($extension);
				logout_hotdesk_devices($extension);
				$extension->delete();
			}
			db::commit();
			if ($extension) {
				fprintf(STDOUT, "Deleted extension %s\n", $extension_number);
			}
		} catch (Exception $e) {
			fprintf(STDERR, "Cannot delete extension %s: %s\n", $extension_number, $e->getMessage());
		}
	}
}

function logout_hotdesk_devices($extension) {
	foreach ($extension->hotdesk_devices() as $device) {
		$device->logout();
	}
}

function delete_portal_user($extension) {
	if ($user = $extension->user()) {
		$user->delete();
	}
}

function delete_queue_members($extension) {
	foreach (queue_member::find("extension_id", $extension->extension_id) as $member) {
		if ($member->type == "dynamic") {
			delete_dynamic_member($extension, $member);
		}
		$member->delete();
	}
}

function delete_dynamic_member($extension, $member) {
	$cos_name = $extension->class_of_service();
	if ($queue = $member->queue()) {
		$queue_name = "Q{$queue->extension}";
		$interface = "Local/{$extension->extension}@{$cos_name}";
		ami::current()->remove_queue_member($queue_name, $interface);
	}
}
