@extends('layouts.superadmin') @section('title','AI: إنذارات ومشاكل') @section('page-title','AI: إنذارات ومشاكل') @section('content') @php $view = $view ?? request('view','table'); if(!in_array($view,['table','cards'],true)) $view='table'; $q = $q ?? request('q',''); $level = $level ?? request('level',''); $userId = $userId ?? request('user_id','all'); $days = $days ?? (int)request('days',7); $from = $from ?? \Carbon\Carbon::parse(request('from', now()->subDays(max(1,$days)-1)->toDateString()))->startOfDay(); $to = $to ?? \Carbon\Carbon::parse(request('to', now()->toDateString()))->endOfDay(); $summary = $summary ?? ['high'=>0,'mid'=>0,'low'=>0,'total'=>0,'from'=>$from->toDateString(),'to'=>$to->toDateString()]; $rows = $rows ?? collect(); $lvlBadge = [ 'high' => ['t'=>'خطر عالي','c'=>'border-rose-400/30 bg-rose-500/15 text-rose-200','dot'=>'bg-rose-400'], 'mid' => ['t'=>'متوسط','c'=>'border-amber-400/30 bg-amber-500/15 text-amber-200','dot'=>'bg-amber-400'], 'low' => ['t'=>'منخفض','c'=>'border-emerald-400/30 bg-emerald-500/15 text-emerald-200','dot'=>'bg-emerald-400'], '' => ['t'=>'—','c'=>'border-white/10 bg-white/5 text-white/70','dot'=>'bg-slate-400'], ]; $riskBar = function(int $risk){ $risk = max(0, min(100, $risk)); $cls = $risk>=60 ? 'bg-rose-500/70' : ($risk>=30 ? 'bg-amber-500/70' : 'bg-emerald-500/70'); return [$risk, $cls]; }; @endphp
{{-- HERO --}}
AI Alerts & Issues • Socratic Sentinel

AI: إنذارات ومشاكل — تحليل المخاطر

الفكرة: نجمع مؤشرات (نشاط/غياب/مخالفات/نقاط/جهاز+IP) ونطلع “Risk” واضح + أسباب.

@if(!empty($selectedUser))
محدد: {{ $selectedUser->name ?? $selectedUser['name'] ?? 'عضو' }} ({{ $selectedUser->username ?? $selectedUser['username'] ?? '' }})
@endif
الإجمالي
{{ (int)($summary['total'] ?? 0) }}
عالي
{{ (int)($summary['high'] ?? 0) }}
متوسط
{{ (int)($summary['mid'] ?? 0) }}
منخفض
{{ (int)($summary['low'] ?? 0) }}
الفترة: {{ $summary['from'] ?? $from->toDateString() }}{{ $summary['to'] ?? $to->toDateString() }}
آخر تحديث: {{ now()->format('H:i:s') }} تحديث تلقائي كل 12 ثانية
{{-- FILTERS --}}
{{-- keep section param if exists --}} @if(request()->has('section')) @endif
توصيف سريع: عالي متوسط منخفض
تصفير
{{-- LIST --}}
قائمة الإنذارات
{{ $rows->count() }} نتيجة
@if($view === 'table')
@forelse($rows as $r) @php $lv = $lvlBadge[$r['risk_level'] ?? ''] ?? $lvlBadge['']; [$rv, $barCls] = $riskBar((int)($r['risk'] ?? 0)); @endphp @empty @endforelse
عضو الخطر نشاط (د) غياب مخالفات نقاط جهاز/IP تفاصيل
{{ $r['name'] ?? '—' }}
{{ $r['username'] ?? '' }} • #{{ $r['id'] ?? '' }}
{{ (int)$rv }}
{{ (int)($r['minutes'] ?? 0) }}
غير مبرر: {{ (int)($r['abs_un'] ?? 0) }}
مبرر: {{ (int)($r['abs_ex'] ?? 0) }}
{{ (int)($r['viol'] ?? 0) }} {{ (int)($r['points'] ?? 0) }} @if((int)($r['dev_flag'] ?? 0) === 1) 🚨 أجهزة: {{ (int)($r['devs'] ?? 0) }} • IPs: {{ (int)($r['ips'] ?? 0) }} @else طبيعي @endif
لا يوجد إنذارات ضمن الفلاتر الحالية.
@else {{-- CARDS --}}
@forelse($rows as $r) @php $lv = $lvlBadge[$r['risk_level'] ?? ''] ?? $lvlBadge['']; [$rv, $barCls] = $riskBar((int)($r['risk'] ?? 0)); $reasons = $r['reasons'] ?? []; @endphp
{{ $r['name'] ?? '—' }}
{{ $r['username'] ?? '' }} • #{{ $r['id'] ?? '' }}
{{ (int)$rv }}
نشاط
{{ (int)($r['minutes'] ?? 0) }} د
مخالفات
{{ (int)($r['viol'] ?? 0) }}
غياب غير مبرر
{{ (int)($r['abs_un'] ?? 0) }}
نقاط
{{ (int)($r['points'] ?? 0) }}
@if((int)($r['dev_flag'] ?? 0) === 1) 🧩 أجهزة: {{ (int)($r['devs'] ?? 0) }} • IPs: {{ (int)($r['ips'] ?? 0) }} @else 🧩 جهاز/IP طبيعي @endif أسباب: {{ is_countable($reasons) ? count($reasons) : 0 }}
@empty
لا يوجد إنذارات ضمن الفلاتر الحالية.
@endforelse
@endif
{{-- MODAL: Reasons --}} @endsection