@extends('admin.layout') @section('title', 'Kullanıcı Aktivite Detayı') @section('page-title', 'Kullanıcı Aktivite Detayı') @push('styles') @endpush @section('content')
@if (session('success')) @endif @if (session('error')) @endif
@if (($fromSource ?? 'analytics') === 'users') Kullanıcı Listesi @else Kayıtlı Kullanıcı Aktivitesi @endif
@foreach ([7 => '7 Gün', 30 => '30 Gün', 90 => '90 Gün', 365 => '1 Yıl'] as $days => $label) {{ $label }} @endforeach @unless ($isDeletedAccount ?? false) AI Sohbetleri @endunless
@if ($isDeletedAccount ?? false)
Silinmiş Hesap. Bu kullanıcı hesabı sistemden kaldırılmış (muhtemelen pasif haldeyken sosyal login ile yeniden giriş yapıldığında otomatik silinip yeniden oluşturulmuş). Aşağıdaki bilgiler, silinmeden önce alınan arşiv kaydından ve o döneme ait ziyaret geçmişinden geliyor. Abonelik/paket/token işlemleri artık yapılamaz.
Arşivlenmiş Hesap Bilgisi
@if ($deletedUserRecord)
Ad Soyad {{ trim(($deletedUserRecord->name ?? '') . ' ' . ($deletedUserRecord->last_name ?? '')) ?: '—' }}
E-posta {{ $deletedUserRecord->email ?? '—' }}
Telefon {{ $deletedUserRecord->phone ?? '—' }}
Giriş Sağlayıcısı {{ $deletedUserRecord->provider ?? '—' }}
Hesap Oluşturulma {{ $deletedUserRecord->account_created_at ? $deletedUserRecord->account_created_at->format('d.m.Y H:i') : '—' }}
Silinme Sebebi {{ $deletedUserRecord->reason ?? '—' }}
Silinme Tarihi {{ $deletedUserRecord->deleted_at_original ? $deletedUserRecord->deleted_at_original->format('d.m.Y H:i') : '—' }}
@else

Bu hesap için arşiv kaydı yok (silme, arşivleme özelliği eklenmeden önce gerçekleşmiş olabilir). Sadece aşağıdaki ziyaret geçmişi mevcut.

@endif
@endif
@unless ($isDeletedAccount ?? false) AI Sohbetleri

@endunless
{{ $user->name }} {{ $user->last_name ?? '' }}

{{ $user->email }}

{{ number_format($totalSessions) }}
Oturum
@if (!empty($aiUsageStats))
{{ $aiUsageStats['total_comments'] ?? 0 }}
AI Yorum
{{ number_format($aiUsageStats['total_chat_words'] ?? 0) }}
Chat Kelime
{{ $aiUsageStats['total_reports'] ?? 0 }}
Rapor
@endif
{{ number_format($totalPageViews) }}
Sayfa Görüntüleme
{{ $totalDurationMs ? round($totalDurationMs / 1000) . ' sn' : '—' }}
Toplam Süre (sayfada)
{{ $firstVisit ? $firstVisit->format('d.m.Y') : '—' }}
İlk Ziyaret
{{ $lastVisit ? $lastVisit->format('d.m.Y H:i') : '—' }}
Son Ziyaret
{{-- Abonelik bilgisi --}} @unless ($isDeletedAccount ?? false)
Abonelik Durumu
Abone mi? @if ($hasActiveSubscription) Evet (Aktif) @else Hayır @endif
@if ($activeSubscription)
Aktif abonelik özeti:
  • Başlangıç: {{ $activeSubscription->starts_at->format('d.m.Y H:i') }}
  • Bitiş: {{ $activeSubscription->ends_at->format('d.m.Y H:i') }}
  • Fiyat: {{ number_format($activeSubscription->price, 2, ',', '.') }} ₺
  • Kayıt tarihi: {{ $activeSubscription->created_at->format('d.m.Y H:i') }}
@endif
Abonelik geçmişi
@if ($subscriptions->isNotEmpty())
@foreach ($subscriptions as $sub) @endforeach
Başlangıç Bitiş Durum Fiyat Oluşturulma İşlem
{{ $sub->starts_at->format('d.m.Y H:i') }} {{ $sub->ends_at->format('d.m.Y H:i') }} @if ($sub->status === 'active' && $sub->ends_at->isFuture()) Aktif @elseif ($sub->status === 'expired') Süresi doldu @elseif ($sub->status === 'cancelled') İptal @else {{ $sub->status }} @endif {{ number_format($sub->price, 2, ',', '.') }} ₺ {{ $sub->created_at->format('d.m.Y H:i') }} @if ($sub->status === 'active' && $sub->ends_at->isFuture())
@csrf
@else — @endif
@else

Bu kullanıcıya ait abonelik kaydı yok.

@endif
Abonelik Ver
@csrf

İnisiyatif sende: SMS sadece kutu işaretlenirse gönderilir.

{{-- Paket ve Haklar --}}
Paket ve Haklar
{{ number_format($user->chat_words_remaining ?? 0) }}
Kalan Token
{{ number_format($user->report_credits_remaining ?? 0) }}
Rapor Hakkı
{{ number_format($user->map_credits_remaining ?? 0) }}
Harita Geçiş
{{ $aiUsageStats['total_comments'] ?? 0 }}
Kullanılan Yorum
{{ number_format($aiUsageStats['total_chat_words'] ?? 0) }}
Kullanılan Chat Kelimesi
{{ $aiUsageStats['total_reports'] ?? 0 }}
Kullanılan Rapor
Hediye Hak Tanımla
@csrf

En az bir hak alanına pozitif değer girin. Hediye gönderildiğinde kullanıcıya SMS ile tarih aralığı bilgisi iletilir.

Token / Hak Düşür
@csrf

Düşülecek miktarı girin veya tümünü sıfırlayın.

Satın alınan paketler
@if ($packagePurchases->isNotEmpty())
@foreach ($packagePurchases as $p) @endforeach
Tarih Tür Paket / Ürün Yorum Kelime Tutar Fatura
{{ $p->created_at->format('d.m.Y H:i') }} @if ($p->purchase_type === 'package') Paket @elseif ($p->purchase_type === 'single_comment') Tekil Yorum @elseif ($p->purchase_type === 'single_comment_tokens') Yorum için token @elseif ($p->purchase_type === 'single_chat') Tekil Chat @elseif ($p->purchase_type === 'single_report') Tekil Rapor @else {{ $p->purchase_type }} @endif {{ $p->package?->name ?? '—' }} {{ $p->comment_credits_added ?: '—' }} {{ $p->chat_words_added ? number_format($p->chat_words_added) : '—' }} {{ number_format($p->amount_paid, 0, ',', '.') }} ₺ {{ $p->order?->invoice_number ?? ($p->order_id ? 'S#' . $p->order_id : '—') }}
@else

Bu kullanıcı henüz paket satın almamış.

@endif
@endunless
Oturumlar ({{ $from->format('d.m.Y') }} – {{ $to->format('d.m.Y') }})
@php // ✅ Gün gün gruplama: oturumlar artık tek tek değil, hangi güne // ait olduklarına göre başlık altında toplanıyor. $visitorsByDay = $visitors->groupBy(fn ($v) => $v->first_visit_at->format('Y-m-d')); @endphp @forelse ($visitorsByDay as $day => $dayVisitors)
{{ \Illuminate\Support\Carbon::parse($day)->translatedFormat('d F Y, l') }}
{{ $dayVisitors->count() }} oturum {{ number_format($dayVisitors->sum(fn ($v) => $v->pageViews->count())) }} sayfa
@foreach ($dayVisitors as $visitor) @php $sessionDuration = $visitor->pageViews->sum('duration_ms'); $sessionDurationSec = $sessionDuration ? round($sessionDuration / 1000) : null; @endphp
{{ $visitor->first_visit_at->format('d.m.Y H:i') }} – {{ $visitor->last_visit_at->format('H:i') }} {{ $visitor->pageViews->count() }} sayfa @if ($sessionDurationSec) {{ $sessionDurationSec }} sn @endif
{{ $visitor->device ?? '—' }} {{ $visitor->browser ?? '—' }} {{ $visitor->platform ?? '—' }}
@foreach ($visitor->pageViews as $pv) @endforeach
Zaman Sayfa / Path Süre HTTP
{{ $pv->created_at->format('H:i:s') }} @if (Str::endsWith(rtrim($pv->path, '/'), 'panel/layout-state')) Panel — Harita Değişikliği @else {{ Str::limit($pv->path, 60) }} @endif @if (!empty($pv->slotChanges) && $pv->slotChanges->isNotEmpty())
@foreach ($pv->slotChanges as $sc) {{ $sc->slot }}: {{ $sc->previous_chart_type ?? '—' }} → {{ $sc->chart_type }} @endforeach
@endif
@if ($pv->duration_ms) {{ round($pv->duration_ms / 1000) }} sn @else — @endif {{ $pv->status_code ?? '—' }}
@endforeach @empty
Bu dönemde bu kullanıcıya ait oturum kaydı yok.
@endforelse
@endsection