#!/usr/bin/php
<?php
/**
 * Demo-only: delete PBX extensions (and related user/device stack) for clean AD sync tests.
 * Only deletes extensions managed by Active Directory (provision_source = 'active_directory').
 *
 * Usage on PBX (scripts dir is often noexec — run with php):
 *   php /usr/share/ombutel/scripts/active_directory_sync_demo_wipe_extensions --dry-run
 *   php /usr/share/ombutel/scripts/active_directory_sync_demo_wipe_extensions --dry-run --prefix 5552
 *   php /usr/share/ombutel/scripts/active_directory_sync_demo_wipe_extensions
 *   php /usr/share/ombutel/scripts/active_directory_sync_demo_wipe_extensions --prefix 5552
 *
 * Always clears ombu_ad_sync_users first. Does not touch AD.
 */

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

use ombutel\db;
use ombutel\extension;
use ombutel\extension_provision;

$dry_run = in_array('--dry-run', $argv, true);
$prefix = '';
foreach ($argv as $i => $arg) {
	if ($arg === '--prefix' && isset($argv[$i + 1])) {
		$prefix = (string) $argv[$i + 1];
	}
}

if (!$dry_run) {
	db::query('delete from `ombu_ad_sync_users`');
	echo "Cleared ombu_ad_sync_users.\n";
}

$removed = 0;
$skipped = 0;
foreach (extension::all() as $ext) {
	if (!extension_provision::is_directory_managed($ext)) {
		continue;
	}
	$num = (string) $ext->extension;
	if ($prefix !== '' && strpos($num, $prefix) !== 0) {
		continue;
	}
	if ($dry_run) {
		echo "would remove: {$num} (id {$ext->extension_id})\n";
		$removed++;
		continue;
	}
	try {
		extension::deep_delete($ext->extension_id);
		echo "removed: {$num}\n";
		$removed++;
	} catch (\Throwable $e) {
		echo "skip {$num}: {$e->getMessage()}\n";
		$skipped++;
	}
}

echo "Done. removed={$removed} skipped={$skipped}" . ($dry_run ? ' (dry-run)' : '') . "\n";
if (!$dry_run && $removed > 0) {
	echo "Run Apply All Changes in the PBX GUI if prompted.\n";
}
