<?php
declare(strict_types=1);
chdir(dirname(__DIR__));
require_once 'db_bootstrap.php';
require_once 'device_admin_alerts_lib.php';
require_once 'messages_lib.php';

$conn=ensure_db(true);$failures=[];$assert=static function(bool $ok,string $message)use(&$failures){if(!$ok)$failures[]=$message;};
device_admin_alerts_ensure_schema($conn);$templates=get_message_templates($conn);
$assert(isset($templates['ADMIN_DEVICE_DOWN']),'قالب الانقطاع غير موجود');
$assert(isset($templates['ADMIN_DEVICE_UP']),'قالب العودة غير موجود');
$settings=device_admin_alerts_settings($conn);$assert(isset($settings['enabled'],$settings['notify_down'],$settings['notify_up']),'إعدادات التنبيه غير مكتملة');
$testId=2147483001;
try{
  device_admin_alert_mute($conn,'sectors',$testId,date('Y-m-d H:i:s',time()+3600),'اختبار آلي',0);
  $assert(device_admin_alert_is_muted($conn,'sectors',$testId),'الكتم المؤقت لم يتفعل');
  $down=device_admin_alert_process($conn,['group'=>'sectors','id'=>$testId,'state'=>'DOWN','name'=>'اختبار','host'=>'192.0.2.1']);
  $up=device_admin_alert_process($conn,['group'=>'sectors','id'=>$testId,'state'=>'UP','name'=>'اختبار','host'=>'192.0.2.1']);
  $assert(!empty($down['ok'])&&!empty($down['muted'])&&(int)($down['queued']??-1)===0,'الحدث المكتوم أضاف رسالة أو فشل');
  $assert(!empty($up['ok'])&&!empty($up['muted'])&&(int)($up['queued']??-1)===0,'عودة الجهاز أثناء الكتم أضافت رسالة أو فشلت');
  $stateRs=$conn->query("SELECT last_state FROM device_admin_alert_state WHERE device_group='sectors' AND device_id={$testId}");$state=$stateRs?$stateRs->fetch_assoc():[];
  $assert(($state['last_state']??'')==='UP','لم تُحدّث الحالة أثناء الكتم');
  device_admin_alert_unmute($conn,'sectors',$testId);
  $assert(!device_admin_alert_is_muted($conn,'sectors',$testId),'إلغاء الكتم لم يعمل');
}finally{
  @$conn->query("DELETE FROM device_alert_mutes WHERE device_group='sectors' AND device_id={$testId}");
  @$conn->query("DELETE FROM device_admin_alert_state WHERE device_group='sectors' AND device_id={$testId}");
}
if($failures){fwrite(STDERR,"FAIL\n- ".implode("\n- ",$failures)."\n");exit(1);}echo "PASS device admin alerts\n";
