import type { LngLat } from './lng-lat';
interface GenericPolygonGeometry<TCoordinates> {
    type: 'Polygon';
    /**
     * Polygon's rings.
     *
     * @remarks
     * Inner rings may extend beyond outer ring.
     * GeoJSON doesn't allow this, but there's a lot of data like this in this JS API.
     */
    coordinates: TCoordinates[][];
}
interface GenericMultiPolygonGeometry<TCoordinates> {
    type: 'MultiPolygon';
    /** Array of polygons. See {@link GenericPolygonGeometry}. */
    coordinates: TCoordinates[][][];
}
interface GenericLineStringGeometry<TCoordinates> {
    type: 'LineString';
    coordinates: TCoordinates[];
}
interface GenericMultiLineStringGeometry<TCoordinates> {
    type: 'MultiLineString';
    coordinates: TCoordinates[][];
}
interface GenericPointGeometry<TCoordinates> {
    type: 'Point';
    coordinates: TCoordinates;
}
type GenericGeometry<TCoordinates> = GenericPolygonGeometry<TCoordinates> | GenericMultiPolygonGeometry<TCoordinates> | GenericLineStringGeometry<TCoordinates> | GenericMultiLineStringGeometry<TCoordinates> | GenericPointGeometry<TCoordinates>;
interface GenericFeature<TCoordinates> {
    type: 'Feature';
    id: string;
    geometry: GenericGeometry<TCoordinates>;
    properties?: Record<string, unknown>;
}
interface GenericPointFeature<TCoordinates> extends GenericFeature<TCoordinates> {
    geometry: GenericPointGeometry<TCoordinates>;
}
interface GenericYandexFeatureCollection<TCoordinates> {
    type: 'FeatureCollection';
    /**
     * Could be collection of features or collection of feature collections.
     * This is not defined by GEO JSON spec, but there is such cases in our data.
     */
    features: (GenericFeature<TCoordinates> | GenericYandexFeatureCollection<TCoordinates>)[];
    properties?: Record<string, unknown>;
}
interface GenericFeatureCollection<TCoordinates> extends GenericYandexFeatureCollection<TCoordinates> {
    id: string;
    features: GenericFeature<TCoordinates>[];
}
type LineStringGeometry = GenericLineStringGeometry<LngLat>;
type MultiLineStringGeometry = GenericMultiLineStringGeometry<LngLat>;
type MultiPolygonGeometry = GenericMultiPolygonGeometry<LngLat>;
type PointGeometry = GenericPointGeometry<LngLat>;
type PolygonGeometry = GenericPolygonGeometry<LngLat>;
export { GenericPolygonGeometry, GenericMultiPolygonGeometry, GenericLineStringGeometry, GenericMultiLineStringGeometry, GenericPointGeometry, GenericGeometry, GenericFeature, GenericPointFeature, GenericFeatureCollection, GenericYandexFeatureCollection, LineStringGeometry, MultiLineStringGeometry, MultiPolygonGeometry, PointGeometry, PolygonGeometry };
