// lib/trackUtils.ts // Utility functions for track name handling /** * Clean track name from database format * Example: "csp/2000/../jr_road_atlanta_2022" -> "jr_road_atlanta_2022" */ export function cleanTrackName(trackName: string): string { if (!trackName) return ''; // Split by '/' and get the last segment const segments = trackName.split('/'); const lastSegment = segments[segments.length - 1]; return lastSegment.trim(); } /** * Clean track config name * Example: "csp/2000/../full" -> "full" */ export function cleanTrackConfig(configName: string): string { if (!configName) return ''; // Split by '/' and get the last segment const segments = configName.split('/'); const lastSegment = segments[segments.length - 1]; return lastSegment.trim(); } /** * Format track name for display * Example: "jr_road_atlanta_2022" -> "JR Road Atlanta 2022" */ export function formatTrackName(trackName: string): string { return cleanTrackName(trackName) .replace(/_/g, ' ') .replace(/\b\w/g, char => char.toUpperCase()); } /** * Get track map URL * Handles the track name cleaning and URL construction */ export function getTrackMapUrl(trackName: string, trackConfig?: string): string { const baseUrl = 'https://files.openwheels.racing/img/tracks'; const cleanedTrack = cleanTrackName(trackName); const cleanedConfig = trackConfig ? cleanTrackConfig(trackConfig) : ''; // Try with config first, fallback to map.png if no config or config is default if (cleanedConfig && cleanedConfig !== 'default' && cleanedConfig !== '') { return `${baseUrl}/${cleanedTrack}/${cleanedConfig}/map.png`; } return `${baseUrl}/${cleanedTrack}/map.png`; }