user(); $defaultProps = [ 'claimedLevels' => [], 'cashRewards' => [], 'userStats' => $user ? [ 'vip_level' => $user->vip_level ?? 0, 'vip_points' => $user->stats?->vip_points ?? 0, ] : null, 'userVipLevel' => $user?->vip_level ?? 0, ]; try { $res = $this->client->get($request, '/vip-levels', [], retry: true); if ($res->successful()) { $j = $res->json() ?: []; return Inertia::render('VipLevels', [ 'claimedLevels' => $j['claimedLevels'] ?? $j['claimed_levels'] ?? [], 'cashRewards' => $j['cashRewards'] ?? $j['rewards'] ?? [], 'userStats' => $j['userStats'] ?? $j['stats'] ?? $defaultProps['userStats'], 'userVipLevel' => $j['userVipLevel'] ?? $j['vip_level'] ?? $defaultProps['userVipLevel'], ]); } } catch (\Throwable $e) { // Fall through to local fallback } // Render page with local data when external API is unavailable return Inertia::render('VipLevels', $defaultProps); } /** * Claim VIP reward → proxy to external API. */ public function claim(Request $request) { $data = $request->validate([ 'level' => 'required|integer|min:1|max:100', ]); try { $res = $this->client->post($request, '/vip-levels/claim', [ 'level' => (int) $data['level'], ]); if ($res->successful()) { $body = $res->json() ?: []; // Backward compat: ensure a success message if (!isset($body['message'])) { $body['message'] = 'Reward claimed successfully!'; } return back()->with('success', $body['message']); } if ($res->clientError()) { $msg = data_get($res->json(), 'message', 'Invalid request'); return back()->withErrors(['message' => $msg]); } if ($res->serverError()) { return back()->withErrors(['message' => 'Service temporarily unavailable']); } return back()->withErrors(['message' => 'API server not reachable']); } catch (\Throwable $e) { return back()->withErrors(['message' => 'API server not reachable']); } } }