/* eslint-disable @next/next/no-img-element */ import { env } from "@/env/server" import { getUrlWithSignature } from "@/utils/map" import type { StaticMapProps } from "@/types/components/maps/staticMap" function getCenter({ coordinates, city, country, }: { coordinates?: { lat: number; lng: number } city?: string country?: string }): string | undefined { if (coordinates) { return `${coordinates.lat},${coordinates.lng}` } if (city && country) { return `${city}, ${country}` } if (country) { return country } return city } export default function StaticMap({ city, country, coordinates, width, height, zoomLevel = 14, mapType = "roadmap", altText, mapId, }: StaticMapProps) { const key = env.GOOGLE_STATIC_MAP_KEY const secret = env.GOOGLE_STATIC_MAP_SIGNATURE_SECRET const baseUrl = "https://maps.googleapis.com/maps/api/staticmap" const center = getCenter({ coordinates, city, country }) if (!center) { return null } // Google Maps Static API only supports images smaller than 640x640px. Read: https://developers.google.com/maps/documentation/maps-static/start#Largerimagesizes const url = new URL( `${baseUrl}?center=${center}&zoom=${zoomLevel}&size=${width}x${height}&maptype=${mapType}&key=${key}` ) if (mapId) { url.searchParams.append("map_id", mapId) } const src = getUrlWithSignature(url, secret) return {altText} }