getProviderConfig($provider); if (!$config) { return false; } if (!$config['requires_api_key']) { return true; } return !empty($config['api_key']) && ($config['enabled'] ?? false); } public function getMapStyles(string $provider): array { $config = $this->getProviderConfig($provider); switch ($provider) { case 'openstreetmap': return [ 'standard' => 'Standard', ]; case 'google': return [ 'roadmap' => 'Roadmap', 'satellite' => 'Satellite', 'hybrid' => 'Hybrid', 'terrain' => 'Terrain', ]; case 'mapbox': return [ 'streets-v11' => 'Streets', 'satellite-v9' => 'Satellite', 'outdoors-v11' => 'Outdoors', 'light-v10' => 'Light', 'dark-v10' => 'Dark', ]; case 'cartodb': return [ 'light' => 'Light', 'dark' => 'Dark', 'voyager' => 'Voyager', ]; case 'satellite': return [ 'satellite' => 'Satellite', ]; default: return ['standard' => 'Standard']; } } public function getMapConfig(string $provider = null): array { $provider = $provider ?: $this->getDefaultProvider(); $config = $this->getProviderConfig($provider); if (!$config) { throw new \InvalidArgumentException("Map provider '{$provider}' not found"); } return [ 'provider' => $provider, 'config' => $config, 'styles' => $this->getMapStyles($provider), 'enabled' => $this->isProviderEnabled($provider), ]; } public function getAllProvidersStatus(): array { $providers = Config::get('services.maps.providers', []); $status = []; foreach ($providers as $key => $provider) { $status[$key] = [ 'name' => $provider['name'], 'free' => $provider['free'], 'requires_api_key' => $provider['requires_api_key'], 'enabled' => $this->isProviderEnabled($key), 'has_api_key' => !$provider['requires_api_key'] || !empty($provider['api_key']), ]; } return $status; } }