/** * Application constants and configuration values * Centralizes magic numbers, API endpoints, and default settings */ const Constants = { // Server configuration PORT: 3002, API_BASE_URL: 'http://localhost:3002', // API Endpoints ENDPOINTS: { DEPARTURES: '/api/departures', SITES_SEARCH: '/api/sites/search', SITES_NEARBY: '/api/sites/nearby', CONFIG_UPDATE: '/api/config/update' }, // External API URLs EXTERNAL_APIS: { SL_TRANSPORT_BASE: 'https://transport.integration.sl.se/v1', OPENWEATHERMAP_BASE: 'https://api.openweathermap.org/data/2.5' }, // Refresh intervals (in milliseconds) REFRESH: { DEPARTURES: 5000, // 5 seconds WEATHER: 30 * 60 * 1000, // 30 minutes DARK_MODE_CHECK: 60000 // 1 minute }, // Default location (Stockholm, Sweden) DEFAULT_LOCATION: { LATITUDE: 59.3293, LONGITUDE: 18.0686, NAME: 'Stockholm' }, // Default site configuration DEFAULT_SITE: { ID: '1411', NAME: 'Ambassaderna' }, // Default search radius (in meters) DEFAULT_SEARCH_RADIUS: 5000, // 5km // Transport mode identifiers TRANSPORT_MODES: { BUS: 'bus', METRO: 'metro', TRAIN: 'train', TRAM: 'tram', SHIP: 'ship' }, // CSS class names (for consistency) CSS_CLASSES: { DARK_MODE: 'dark-mode', ORIENTATION_NORMAL: 'normal', ORIENTATION_LANDSCAPE: 'landscape', ORIENTATION_VERTICAL: 'vertical', ORIENTATION_UPSIDE_DOWN: 'upsidedown', ORIENTATION_VERTICAL_REVERSE: 'vertical-reverse' }, // Time thresholds (in minutes) TIME_THRESHOLDS: { URGENT: 5, // Less than 5 minutes is urgent (red) WITHIN_HOUR: 60 // Within next hour }, // LocalStorage keys STORAGE_KEYS: { CONFIG: 'sl-departures-config' }, // Timezone TIMEZONE: 'Europe/Stockholm', // Date/time formats DATE_FORMAT: { TIMEZONE: 'Europe/Stockholm', LOCALE: 'sv-SE' } }; // Export constants window.Constants = Constants;