import { FeatureCollection } from 'geojson';
import { CountryData, PlaceData } from "../config/interfaces";
import { TypeCitySize, TypeCityType } from "../db/cities";
export type TypeProperties = {
    name?: string;
    fill?: string;
    stroke?: string;
    "stroke-width"?: number;
    "iso_a2"?: string;
    "iso_a2_eh"?: string;
    [key: string]: any;
};
export type TypePoint = [number, number];
export type TypePointGeometry = {
    type: "Point";
    coordinates: TypePoint;
};
export type TypeLine = TypePoint[];
export type TypeLineStringGeometry = {
    type: "LineString";
    coordinates: TypeLine;
};
export type TypePolygon = TypePoint[][];
export type TypePolygonGeometry = {
    type: "Polygon";
    coordinates: TypePolygon;
};
export type TypeMultiPolygon = TypePoint[][][];
export type TypeMultiPolygonGeometry = {
    type: "MultiPolygon";
    coordinates: TypeMultiPolygon;
};
export type TypeGeometry = TypePointGeometry | TypePolygonGeometry | TypeLineStringGeometry | TypeMultiPolygonGeometry;
export type TypeFeature = {
    type: "Feature";
    id?: string;
    name?: string;
    country?: string;
    geometry: TypeGeometry;
    properties: TypeProperties;
};
export type TypeCropBoundingBox = TypePoint[];
export type TypeZoomGapBoundingBoxFactor = [number, number];
export interface InterfaceGeoJson extends FeatureCollection {
    type: "FeatureCollection";
    citiesAdded?: boolean;
    features: TypeFeature[];
}
export type TypeFeatureMap = {
    [key: string]: TypeFeature;
};
export type TypeBoundingBoxType = 'country' | 'all' | 'europe';
export type TypeDataSource = 'medium' | 'low' | 'tiny';
export type TypeCountryKey = string | null;
export type TypeBoundingBox = {
    longitudeMin: number;
    latitudeMin: number;
    longitudeMax: number;
    latitudeMax: number;
    width: number;
    height: number;
};
/**
 * Map click callback types.
 */
export type TypeClickCountry = ((data: CountryData) => void) | null;
export type TypeClickPlace = ((data: PlaceData) => void) | null;
/**
 * TypeSvg types.
 */
export type TypeSvgElement = 'path' | 'circle' | 'g';
export type TypeSvgCountry = {
    id: string | null;
    name: string;
    selected: boolean;
    path: string;
    fill?: string;
    stroke?: string;
    "stroke-width"?: number;
};
export type TypeSvgPlace = {
    id: string | null;
    name: string;
    placeType: TypeCityType;
    priority: number;
    size: TypeCitySize;
    x: number;
    y: number;
    r?: number;
    fill?: string;
};
export type TypeSvgContent = {
    svgPaths: string;
    svgCircles: string;
    viewBoxLeft: number;
    viewBoxTop: number;
    viewBoxWidth: number;
    viewBoxHeight: number;
};
