@php $periodInfo = $analytics['period'] ?? ['key' => '30d', 'options' => ['30d' => 30], 'from' => now(), 'to' => now()]; @endphp

{{ __('messages.dashboard') }}

{{ __('messages.analytics_dashboard_subtitle') }}

{{ ($periodInfo['from'] ?? now())->format('Y-m-d') }} - {{ ($periodInfo['to'] ?? now())->format('Y-m-d') }}
@php $overview = $analytics['overview'] ?? []; $reportsAnalytics = $analytics['reports'] ?? ['statuses' => [], 'daily' => ['items' => [], 'max' => 1]]; $recoveryAnalytics = $analytics['recovery'] ?? ['overall' => ['ratio' => 0, 'avg_seconds' => null, 'duration_samples' => 0], 'categories' => [], 'max_ratio' => 1]; $regionsAnalytics = $analytics['regions'] ?? ['items' => [], 'max' => 1]; $typesAnalytics = $analytics['types'] ?? ['categories' => [], 'categories_total' => 0, 'categories_max' => 1, 'top_names' => [], 'top_names_max' => 1]; $adminActivity = $analytics['admin_activity'] ?? ['total_actions' => 0, 'active_admins' => 0, 'top_admins' => [], 'top_admins_max' => 1, 'top_actions' => [], 'top_actions_max' => 1, 'daily' => ['items' => [], 'max' => 1]]; $avgRecoveryLabel = ($overview['avg_recovery_seconds'] ?? null) !== null ? \Carbon\CarbonInterval::seconds((int) $overview['avg_recovery_seconds'])->cascade()->forHumans(['short' => true, 'parts' => 3]) : __('messages.not_available'); @endphp

{{ __('messages.analytics_dashboard_title') }}

{{ __('messages.analytics_dashboard_subtitle') }}

{{ __('messages.quick_actions') }}
@canany(['create_internet_devices', 'create_stolen_devices'])

{{ __('messages.add_device') }}

{{ __('messages.create') }}

@endcanany @canany(['create_mobile_phones', 'create_stolen_devices'])

{{ __('messages.add_mobile_phone') }}

{{ __('messages.create') }}

@endcanany @canany(['create_vehicles', 'create_stolen_devices'])

{{ __('messages.add_vehicle') }}

{{ __('messages.create') }}

@endcanany @canany(['create_admin_users', 'manage_admin_users'])

{{ __('messages.add_admin_user') }}

{{ __('messages.admin_users') }}

@endcanany @canany(['view_roles_permissions', 'manage_roles_permissions'])

{{ __('messages.roles_permissions') }}

{{ __('messages.update') }}

@endcanany @canany(['view_settings', 'update_settings', 'manage_settings'])

{{ __('messages.settings') }}

{{ __('messages.update') }}

@endcanany

{{ __('messages.total_admin_users') }}

{{ $stats['admins_count'] }}

👤

{{ __('messages.total_device_records') }}

{{ $stats['devices_count'] }}

📦

{{ __('messages.visible_records') }}

{{ $stats['visible_devices_count'] }}

📡

{{ __('messages.status_stolen') }}

{{ $stats['stolen_devices_count'] }}

🔒

{{ __('messages.reports_in_period') }}

{{ $overview['reports_total'] ?? 0 }}

📝

{{ __('messages.recovery_rate_overall') }}

{{ number_format((float) ($overview['recovery_rate_overall'] ?? 0), 1) }}%

♻️

{{ __('messages.reports_in_period') }}

{{ __('messages.reports_status_breakdown') }}

@foreach (($reportsAnalytics['statuses'] ?? []) as $statusKey => $statusCount)

{{ __('messages.sighting_status_'.$statusKey) }}

{{ $statusCount }}

@endforeach

{{ __('messages.reports_daily_trend') }}

@foreach (($reportsAnalytics['daily']['items'] ?? []) as $dayItem) @php $dayRatio = ((int) $dayItem['count'] / max(1, (int) ($reportsAnalytics['daily']['max'] ?? 1))) * 100; @endphp
{{ $dayItem['label'] }} {{ $dayItem['count'] }}
@endforeach

{{ __('messages.recovery_rate_overall') }}

{{ __('messages.avg_recovery_time') }}: {{ $avgRecoveryLabel }}

@php $overallRecovery = $recoveryAnalytics['overall'] ?? ['ratio' => 0, 'recovered' => 0, 'total' => 0, 'duration_samples' => 0]; $overallRecoveryRatio = (float) ($overallRecovery['ratio'] ?? 0); @endphp
{{ __('messages.recovery_rate_overall') }} {{ number_format($overallRecoveryRatio, 1) }}%

{{ $overallRecovery['recovered'] ?? 0 }} / {{ $overallRecovery['total'] ?? 0 }}

@foreach (($recoveryAnalytics['categories'] ?? []) as $categoryItem) @php $categoryRatio = (float) ($categoryItem['ratio'] ?? 0); @endphp
{{ __('messages.sighting_category_'.$categoryItem['key']) }} {{ number_format($categoryRatio, 1) }}%

{{ $categoryItem['recovered'] ?? 0 }} / {{ $categoryItem['total'] ?? 0 }}

@endforeach

{{ __('messages.top_regions') }}

{{ __('messages.analytics_period') }}: {{ __('messages.analytics_period_'.($periodInfo['key'] ?? '30d')) }}

@if (empty($regionsAnalytics['items'] ?? []))

{{ __('messages.no_data') }}

@else
@foreach (($regionsAnalytics['items'] ?? []) as $regionItem) @php $regionRatio = ((int) $regionItem['count'] / max(1, (int) ($regionsAnalytics['max'] ?? 1))) * 100; @endphp
{{ $regionItem['name'] }} {{ $regionItem['count'] }}
@endforeach
@endif

{{ __('messages.top_device_types') }}

{{ __('messages.total_device_records') }}: {{ $typesAnalytics['categories_total'] ?? 0 }}

@foreach (($typesAnalytics['categories'] ?? []) as $typeCategory) @php $typeRatio = ((int) $typeCategory['count'] / max(1, (int) ($typesAnalytics['categories_max'] ?? 1))) * 100; @endphp
{{ __('messages.sighting_category_'.$typeCategory['key']) }} {{ $typeCategory['count'] }}
@endforeach

{{ __('messages.top_device_names') }}

@forelse (($typesAnalytics['top_names'] ?? []) as $topNameItem)
{{ $topNameItem['name'] }} {{ $topNameItem['count'] }}
@empty

{{ __('messages.no_data') }}

@endforelse

{{ __('messages.admin_activity') }}

{{ __('messages.analytics_period') }}: {{ __('messages.analytics_period_'.($periodInfo['key'] ?? '30d')) }}

{{ __('messages.admin_activity_total_actions') }}: {{ $adminActivity['total_actions'] ?? 0 }} {{ __('messages.admin_activity_active_admins') }}: {{ $adminActivity['active_admins'] ?? 0 }}

{{ __('messages.admin_activity_daily_trend') }}

@foreach (($adminActivity['daily']['items'] ?? []) as $dayItem) @php $activityRatio = ((int) $dayItem['count'] / max(1, (int) ($adminActivity['daily']['max'] ?? 1))) * 100; @endphp
{{ $dayItem['label'] }} {{ $dayItem['count'] }}
@endforeach

{{ __('messages.admin_activity_top_admins') }}

@forelse (($adminActivity['top_admins'] ?? []) as $adminItem)

{{ $adminItem['name'] }}

{{ $adminItem['username'] }}

{{ $adminItem['actions'] }}
@empty

{{ __('messages.no_data') }}

@endforelse

{{ __('messages.admin_activity_top_actions') }}

@forelse (($adminActivity['top_actions'] ?? []) as $actionItem)

{{ $actionItem['action'] }}

{{ $actionItem['count'] }}
@empty

{{ __('messages.no_data') }}

@endforelse

{{ __('messages.latest_devices') }}

@forelse ($recentDevices as $device) @empty @endforelse
{{ __('messages.device_name') }} MAC {{ __('messages.status') }} {{ __('messages.visible') }}
{{ $device->device_name }} {{ $device->mac_address }} {{ __('messages.status_'.$device->status) }} {{ $device->is_visible ? __('messages.yes') : __('messages.no') }}
{{ __('messages.no_data') }}

{{ __('messages.latest_audit_logs') }}

@forelse ($recentLogs as $log)

{{ $log->action }}

{{ class_basename($log->entity_type) }} #{{ $log->entity_id }} - {{ $log->created_at?->diffForHumans() }}

@empty
{{ __('messages.no_data') }}
@endforelse