import {
  BeforeResetEvent as KendoBeforeResetEvent,
  MapClickEvent as KendoMapClickEvent,
  MarkerActivateEvent as KendoMarkerActivateEvent,
  MarkerClickEvent as KendoMarkerClickEvent,
  MarkerCreatedEvent as KendoMarkerCreatedEvent,
  PanEvent as KendoPanEvent,
  PanEndEvent as KendoPanEndEvent,
  ResetEvent as KendoResetEvent,
  ShapeClickEvent as KendoShapeClickEvent,
  ShapeCreatedEvent as KendoShapeCreatedEvent,
  ShapeFeatureCreatedEvent as KendoShapeFeatureCreatedEvent,
  ShapeMouseEnterEvent as KendoShapeMouseEnterEvent,
  ShapeMouseLeaveEvent as KendoShapeMouseLeaveEvent,
  ZoomEndEvent as KendoZoomEndEvent,
  ZoomStartEvent as KendoZoomStartEvent,
} from "@progress/kendo-react-map";

export type MapControlsPosition =
  | "topLeft"
  | "topRight"
  | "bottomRight"
  | "bottomLeft";

export interface MapControls {
  attribution?: boolean | { position?: MapControlsPosition };
  navigator?: boolean | { position?: MapControlsPosition };
  zoom?: boolean | { position?: MapControlsPosition };
}
export interface MapProps {
  dataTestId?: string;
  children: React.ReactNode;
  center?: number[] | [number, number];
  className?: string;
  controls?: MapControls;
  dir?: string;
  maxZoom?: number;
  minSize?: number;
  minZoom?: number;
  pannable?: boolean;
  style?: React.CSSProperties;
  wraparound?: boolean;
  zoom?: number;
  zoomable?: boolean;
  onBeforeReset?: (event: KendoBeforeResetEvent) => void;
  onMapClick?: (event: KendoMapClickEvent) => void;
  onMarkerActivate?: (event: KendoMarkerActivateEvent) => void;
  onMarkerClick?: (event: KendoMarkerClickEvent) => void;
  onMarkerCreated?: (event: KendoMarkerCreatedEvent) => void;
  onPan?: (event: KendoPanEvent) => void;
  onPanEnd?: (event: KendoPanEndEvent) => void;
  onRefresh?: (mapOptions: any, mapInstance: any) => void;
  onReset?: (event: KendoResetEvent) => void;
  onShapeClick?: (event: KendoShapeClickEvent) => void;
  onShapeCreated?: (event: KendoShapeCreatedEvent) => void;
  onShapeFeatureCreated?: (event: KendoShapeFeatureCreatedEvent) => void;
  onShapeMouseEnter?: (event: KendoShapeMouseEnterEvent) => void;
  onShapeMouseLeave?: (event: KendoShapeMouseLeaveEvent) => void;
  onZoomEnd?: (event: KendoZoomEndEvent) => void;
  onZoomStart?: (event: KendoZoomStartEvent) => void;
}
