import { BaseLayer } from './base_layer'

/**
 * Recent point layer for displaying the most recent location in live mode
 * This layer is always visible when live mode is enabled, regardless of points layer visibility
 */
export class RecentPointLayer extends BaseLayer {
  constructor(map, options = {}) {
    super(map, { id: 'recent-point', visible: true, ...options })
  }

  getSourceConfig() {
    return {
      type: 'geojson',
      data: this.data || {
        type: 'FeatureCollection',
        features: []
      }
    }
  }

  getLayerConfigs() {
    return [
      // Pulsing outer circle (animation effect)
      {
        id: `${this.id}-pulse`,
        type: 'circle',
        source: this.sourceId,
        paint: {
          'circle-color': '#ef4444',
          'circle-radius': [
            'interpolate',
            ['linear'],
            ['zoom'],
            0, 8,
            20, 40
          ],
          'circle-opacity': 0.3
        }
      },
      // Main point circle
      {
        id: this.id,
        type: 'circle',
        source: this.sourceId,
        paint: {
          'circle-color': '#ef4444',
          'circle-radius': [
            'interpolate',
            ['linear'],
            ['zoom'],
            0, 6,
            20, 20
          ],
          'circle-stroke-width': 2,
          'circle-stroke-color': '#ffffff'
        }
      }
    ]
  }

  /**
   * Update layer with a single recent point
   * @param {number} lon - Longitude
   * @param {number} lat - Latitude
   * @param {Object} properties - Additional point properties
   */
  updateRecentPoint(lon, lat, properties = {}) {
    const data = {
      type: 'FeatureCollection',
      features: [
        {
          type: 'Feature',
          geometry: {
            type: 'Point',
            coordinates: [lon, lat]
          },
          properties
        }
      ]
    }
    this.update(data)
  }

  /**
   * Clear the recent point
   */
  clear() {
    this.update({
      type: 'FeatureCollection',
      features: []
    })
  }
}
