import Component from '@glimmer/component'; import { fn } from '@ember/helper'; import { on } from '@ember/modifier'; import capitalize from '../helpers/capitalize'; export default class PlaceDetails extends Component { get place() { return this.args.place || {}; } get tags() { return this.place.osmTags || {}; } get name() { return ( this.place.title || this.tags.name || this.tags['name:en'] || 'Unnamed Place' ); } get type() { return ( this.tags.amenity || this.tags.shop || this.tags.tourism || this.tags.leisure || this.tags.historic || 'Point of Interest' ); } get address() { const t = this.tags; const parts = []; // Street + Number if (t['addr:street']) { let street = t['addr:street']; if (t['addr:housenumber']) { street += ` ${t['addr:housenumber']}`; } parts.push(street); } // Postcode + City if (t['addr:city']) { let city = t['addr:city']; if (t['addr:postcode']) { city = `${t['addr:postcode']} ${city}`; } parts.push(city); } if (parts.length === 0) return null; return parts.join(', '); } get phone() { return this.tags.phone || this.tags['contact:phone']; } get website() { return this.place.url || this.tags.website || this.tags['contact:website']; } get openingHours() { return this.tags.opening_hours; } get cuisine() { if (!this.tags.cuisine) return null; return this.tags.cuisine .split(';') .map(c => capitalize.compute([c])) .map(c => c.replace('_', ' ')) .join(', '); } get wikipedia() { return this.tags.wikipedia; } get geoLink() { const lat = this.place.lat; const lon = this.place.lon; if (!lat || !lon) return '#'; const label = encodeURIComponent(this.name); return `geo:${lat},${lon}?q=${lat},${lon}(${label})`; } get visibleGeoLink() { const lat = this.place.lat; const lon = this.place.lon; if (!lat || !lon) return ''; return `${lat}, ${lon}`; } get osmUrl() { const id = this.place.osmId; if (!id) return null; const type = this.place.osmType || 'node'; return `https://www.openstreetmap.org/${type}/${id}`; } }