'API key is not configured.']); exit; } $authHeader = $_SERVER['HTTP_AUTHORIZATION'] ?? ''; if (strpos($authHeader, 'Bearer ') !== 0) { http_response_code(401); echo json_encode(['error' => 'Authorization header missing or invalid.']); exit; } $token = substr($authHeader, 7); if ($token !== $apiKey) { http_response_code(401); echo json_encode(['error' => 'Invalid API key.']); exit; } log_api_request('weather'); if ($_SERVER['REQUEST_METHOD'] === 'POST') { $data = json_decode(file_get_contents('php://input'), true); try { $pdo = db(); $stmt = $pdo->prepare( "INSERT INTO weather (location_name, zip_code, observation_time, weather_condition, weather_description, weather_icon, temperature_f, feels_like_f, temp_min_f, temp_max_f, humidity_pct, wind_speed_mph, is_extreme_heat, is_extreme_cold, is_severe_weather, weather_alerts) VALUES (:location_name, :zip_code, :observation_time, :weather_condition, :weather_description, :weather_icon, :temperature_f, :feels_like_f, :temp_min_f, :temp_max_f, :humidity_pct, :wind_speed_mph, :is_extreme_heat, :is_extreme_cold, :is_severe_weather, :weather_alerts)" ); $stmt->execute([ ':location_name' => $data['location_name'] ?? null, ':zip_code' => $data['zip_code'] ?? null, ':observation_time' => $data['observation_time'] ?? null, ':weather_condition' => $data['weather_condition'] ?? null, ':weather_description' => $data['weather_description'] ?? null, ':weather_icon' => $data['weather_icon'] ?? null, ':temperature_f' => $data['temperature_f'] ?? null, ':feels_like_f' => $data['feels_like_f'] ?? null, ':temp_min_f' => $data['temp_min_f'] ?? null, ':temp_max_f' => $data['temp_max_f'] ?? null, ':humidity_pct' => $data['humidity_pct'] ?? null, ':wind_speed_mph' => $data['wind_speed_mph'] ?? null, ':is_extreme_heat' => $data['is_extreme_heat'] ?? 0, ':is_extreme_cold' => $data['is_extreme_cold'] ?? 0, ':is_severe_weather' => $data['is_severe_weather'] ?? 0, ':weather_alerts' => isset($data['weather_alerts']) ? json_encode($data['weather_alerts']) : null, ]); http_response_code(201); echo json_encode(['success' => true, 'message' => 'Weather data created successfully.']); } catch (PDOException $e) { error_log("DB Error: " . $e->getMessage()); http_response_code(500); echo json_encode(['error' => 'Database error.']); } } else { http_response_code(405); // Method Not Allowed echo json_encode(['error' => 'Only POST method is accepted.']); }