@php
if (!function_exists('krx_avatar_initial')) {
function krx_avatar_initial($value) {
$value = trim((string) $value);
if ($value === '') {
return 'K';
}
if (function_exists('mb_substr') && function_exists('mb_strtoupper')) {
return mb_strtoupper(mb_substr($value, 0, 1));
}
return strtoupper(substr($value, 0, 1));
}
}
$userId = session('user_id') ?? auth()->id();
$userNickname = session('user_nickname', 'Usuário');
$userEmail = session('user_email', 'usuario@gigaxarena.com');
$currentRoute = \Illuminate\Support\Facades\Route::currentRouteName();
$dbRole = null;
$dbAvatar = null;
if ($userId) {
try {
$userRow = \Illuminate\Support\Facades\DB::table('users')
->select('*')
->where('id', $userId)
->first();
if ($userRow) {
$dbRole = trim(strtolower((string) ($userRow->role ?? '')));
$dbAvatar = \App\Support\GigaxAvatar::fromUser($userRow);
$freshNickname = trim((string) ($userRow->nickname ?? $userRow->name ?? ''));
if ($freshNickname !== '') {
$userNickname = $freshNickname;
session(['user_nickname' => $freshNickname]);
}
}
} catch (\Throwable $e) {
$dbRole = null;
$dbAvatar = null;
}
}
$sessionRole = trim(strtolower((string) session('user_role', '')));
$userRole = $dbRole ?: $sessionRole ?: 'user';
if (!empty($dbRole)) {
session(['user_role' => $dbRole]);
}
$staffRoles = ['admin', 'administrator', 'owner', 'moderator', 'mod', 'support', 'staff'];
$isStaff = in_array($userRole, $staffRoles, true);
$roleLabelMap = [
'admin' => 'Administrador',
'administrator' => 'Administrador',
'owner' => 'Administrador',
'moderator' => 'Moderador',
'mod' => 'Moderador',
'support' => 'Suporte',
'staff' => 'Equipe',
];
$roleLabel = $roleLabelMap[$userRole] ?? 'Jogador';
$avatarUrl = $dbAvatar ?: \App\Support\GigaxAvatar::url(session('user_avatar'));
if (!empty($avatarUrl)) {
session(['user_avatar' => $avatarUrl]);
}
$onlineFriends = collect();
$offlineFriends = collect();
$inGameFriends = collect();
$pendingRequests = collect();
if ($userId) {
try {
$friendships = \App\Models\Friendship::query()
->with([
'requester:id,nickname,avatar,avatar_url,is_online,last_seen_at',
'addressee:id,nickname,avatar,avatar_url,is_online,last_seen_at'
])
->where(function ($q) use ($userId) {
$q->where('requester_id', $userId)
->orWhere('addressee_id', $userId);
})
->where('status', 'accepted')
->latest()
->get();
$mappedFriends = $friendships->map(function ($friendship) use ($userId) {
$friend = (int) $friendship->requester_id === (int) $userId
? $friendship->addressee
: $friendship->requester;
if (!$friend) {
return null;
}
$lastSeenAt = !empty($friend->last_seen_at)
? \Carbon\Carbon::parse($friend->last_seen_at)
: null;
$isOnline = !empty($friend->is_online)
|| ($lastSeenAt && $lastSeenAt->gte(now()->subMinutes(10)));
return [
'id' => $friend->id,
'nickname' => $friend->nickname ?? 'Usuário',
'avatar' => $friend->avatar ?? $friend->avatar_url ?? '/default-avatar.png',
'avatar_url' => $friend->avatar_url ?? $friend->avatar ?? '/default-avatar.png',
'status' => $isOnline ? 'online' : 'offline',
'status_text' => $isOnline ? 'Online agora' : 'Offline',
'last_seen_human' => $lastSeenAt ? $lastSeenAt->diffForHumans() : 'Offline',
];
})->filter()->values();
$onlineFriends = $mappedFriends->where('status', 'online')->values();
$offlineFriends = $mappedFriends->where('status', 'offline')->values();
$inGameFriends = collect();
$pendingRequests = \Illuminate\Support\Facades\DB::table('friendships as f')
->join('users as u', 'u.id', '=', 'f.requester_id')
->where('f.addressee_id', $userId)
->where('f.status', 'pending')
->select('u.id', 'u.nickname', 'u.avatar', 'u.avatar_url')
->get();
} catch (\Throwable $e) {
$onlineFriends = collect();
$offlineFriends = collect();
$inGameFriends = collect();
$pendingRequests = collect();
}
}
$onlineCount = $onlineFriends->count();
$offlineCount = $offlineFriends->count();
$inGameCount = $inGameFriends->count();
$pendingCount = $pendingRequests->count();
$totalFriends = $onlineCount + $offlineCount + $inGameCount;
$hasDashboardRoute = \Illuminate\Support\Facades\Route::has('dashboard');
$hasLobbyRoute = \Illuminate\Support\Facades\Route::has('lobby.index');
$hasRankingRoute = \Illuminate\Support\Facades\Route::has('ranking');
$hasTeamsRoute = \Illuminate\Support\Facades\Route::has('teams.index');
$hasPlayersRoute = \Illuminate\Support\Facades\Route::has('players.index');
$hasTournamentsRoute = \Illuminate\Support\Facades\Route::has('tournaments.index');
$hasTrainingsRoute = \Illuminate\Support\Facades\Route::has('trainings.index');
$hasAdminMatchesRoute = \Illuminate\Support\Facades\Route::has('admin.matches');
$hasAdminLogsRoute = \Illuminate\Support\Facades\Route::has('admin.logs');
$hasAdminAntiCheatRoute = \Illuminate\Support\Facades\Route::has('admin.anti-cheat');
$profileUrl = \Illuminate\Support\Facades\Route::has('profile') ? route('profile') : url('/profile');
$profileEditUrl = \Illuminate\Support\Facades\Route::has('perfil.editar') ? route('perfil.editar') : url('/profile?tab=editar');
$profileHistoryUrl = \Illuminate\Support\Facades\Route::has('partidas') ? route('partidas') : url('/partidas');
$profileSettingsUrl = \Illuminate\Support\Facades\Route::has('configuracoes') ? route('configuracoes') : url('/profile?tab=configuracoes');
$friendsIndexUrl = \Illuminate\Support\Facades\Route::has('friends.index') ? route('friends.index') : url('/amigos');
$messagesUrl = $friendsIndexUrl . '#mensagens';
$logoutUrl = \Illuminate\Support\Facades\Route::has('logout') ? route('logout') : url('/logout');
$hasPrivateChatRoute = \Illuminate\Support\Facades\Route::has('friends.chat');
$hasFriendsAcceptRoute = \Illuminate\Support\Facades\Route::has('friends.accept');
$hasFriendsDeclineRoute = \Illuminate\Support\Facades\Route::has('friends.decline');
@endphp