import { AbstractMarker, AbstractPolygon, AbstractPolyline, IMarker, IPolygon, IPolyline } from '@tuoyuan/map-adapter-lib';
/** 几何ID */
export type GeometryId = string | number;
/** 几何类型 */
export type GeometryType = 'marker' | 'polygon' | 'polyline';
/** 几何图形基础配置 */
export interface IBaseGeometryOptions {
    /** ID */
    id: GeometryId;
    /** 类型 */
    type: GeometryType;
    /** 名称 */
    name: string;
    /** 业务数据 */
    data?: Record<string, any>;
    /** 是否可见 */
    visible?: boolean;
}
/** Marker配置 */
export type MarkerOptions = IBaseGeometryOptions & Pick<IMarker, 'position' | 'style' | 'label'> & {
    type: 'marker';
};
/** Polyline配置 */
export type PolylineOptions = IBaseGeometryOptions & Pick<IPolyline, 'path' | 'style' | 'label'> & {
    type: 'polyline';
};
/** Polygon配置 */
export type PolygonOptions = IBaseGeometryOptions & Pick<IPolygon, 'path' | 'style' | 'label' | 'holes'> & {
    type: 'polygon';
};
/** 地图几何图形配置 */
export type MapGeometryOptions = MarkerOptions | PolylineOptions | PolygonOptions;
export type AbstractMapGeometry = AbstractMarker | AbstractPolyline | AbstractPolygon;
export interface IMapGeometry {
    /** 几何ID */
    id: GeometryId;
    /** 几何类型 */
    type: GeometryType;
    /** 名称 */
    name: string;
    /** 几何图形 */
    geometry: AbstractMapGeometry;
    /** 业务数据 */
    data?: Record<string, any>;
    /** 是否可见 */
    visible?: boolean;
}
export interface IBaseGeometry<T extends Record<string, any> = {}> {
    type: string;
    properties?: T;
    bbox?: [number, number, number, number];
}
export interface IPointGeometry<T extends Record<string, any> = {}> extends IBaseGeometry<T> {
    type: 'Point';
    coordinates: [number, number];
}
export interface ILineStringGeometry<T extends Record<string, any> = {}> extends IBaseGeometry<T> {
    type: 'LineString';
    coordinates: [number, number][];
}
export interface IPolygonGeometry<T extends Record<string, any> = {}> extends IBaseGeometry<T> {
    type: 'Polygon';
    coordinates: [number, number][][];
}
export type GeometryData<K extends Record<string, any> = {}> = IPointGeometry<K> | ILineStringGeometry<K> | IPolygonGeometry<K>;
export interface IFeatureGeometry<T extends Record<string, any> = {}, K extends Record<string, any> = {}> extends IBaseGeometry<T> {
    type: 'Feature';
    geometry: GeometryData<K>;
}
