null, 'country_name' => null]; } } return Cache::remember('geoip_' . md5($ip), 86400, function () use ($ip) { try { $response = Http::timeout(3)->get( "http://ip-api.com/json/{$ip}", ['fields' => 'status,country,countryCode'] ); if ($response->successful() && $response->json('status') === 'success') { return [ 'country' => $response->json('countryCode'), 'country_name' => $response->json('country'), ]; } } catch (\Throwable $e) { Log::debug('GeoIP lookup failed for ' . $ip . ': ' . $e->getMessage()); } return ['country' => null, 'country_name' => null]; }); } }