import { Store, UIEventSource } from "../UIEventSource"
import FilteredLayer from "../../Models/FilteredLayer"
import { BBox } from "../BBox"
import { Feature, Geometry } from "@turf/turf"
import { OsmFeature } from "../../Models/OsmFeature"

export default interface FeatureSource {
    features: Store<{ feature: OsmFeature; freshness: Date }[]>
    /**
     * Mainly used for debuging
     */
    name: string
}

export interface Tiled {
    tileIndex: number
    bbox: BBox
}

/**
 * A feature source which only contains features for the defined layer
 */
export interface FeatureSourceForLayer extends FeatureSource {
    readonly layer: FilteredLayer
}

/**
 * A feature source which is aware of the indexes it contains
 */
export interface IndexedFeatureSource extends FeatureSource {
    readonly containedIds: Store<Set<string>>
}