import BaiduMap from './map/Map.vue'
import BmView from './map/MapView.vue'
import BmScale from './controls/Scale.vue'
import BmNavigation from './controls/Navigation.vue'
import BmMapType from './controls/MapType.vue'
import BmOverviewMap from './controls/OverviewMap.vue'
import BmGeolocation from './controls/Geolocation.vue'
import BmCopyright from './controls/Copyright.vue'
import BmCityList from './controls/CityList.vue'
import BmPanorama from './controls/Panorama.vue'
import BmControl from './controls/Control.vue'
import BmMarker from './overlays/Marker.vue'
import BmPointCollection from './overlays/PointCollection.vue'
import BmPolyline from './overlays/Polyline.vue'
import BmPolygon from './overlays/Polygon.vue'
import BmCircle from './overlays/Circle.vue'
import BmGround from './overlays/Ground.vue'
import BmLabel from './overlays/Label.vue'
import BmInfoWindow from './overlays/InfoWindow.vue'
import BmOverlay from './overlays/Overlay.vue'
import BmContextMenu from './context-menu/Menu.vue'
import BmContextMenuItem from './context-menu/Item.vue'
import BmLocalSearch from './search/LocalSearch.vue'
import BmTransit from './search/Transit.vue'
import BmWalking from './search/Walking.vue'
import BmDriving from './search/Driving.vue'
import BmBus from './search/Bus.vue'
import BmTile from './layers/Tile.vue'
import BmTraffic from './layers/Traffic.vue'
import BmBoundary from './others/Boundary.vue'
import BmAutoComplete from './others/AutoComplete.vue'

import BmlMarkerClusterer from './extra/MarkerClusterer.vue'
import BmlLushu from './extra/Lushu.vue'
import BmlHeatmap from './extra/Heatmap.vue'
import BmlCurveLine from './extra/CurveLine.vue'

export default {
  install (Vue, options) {
    const {ak} = options
    Vue.prototype._BMap = () => ({ak})

    Vue.component('baidu-map', BaiduMap)
    Vue.component('bm-view', BmView)

    Vue.component('bm-scale', BmScale)
    Vue.component('bm-navigation', BmNavigation)
    Vue.component('bm-map-type', BmMapType)
    Vue.component('bm-overview-map', BmOverviewMap)
    Vue.component('bm-geolocation', BmGeolocation)
    Vue.component('bm-copyright', BmCopyright)
    Vue.component('bm-city-list', BmCityList)
    Vue.component('bm-panorama', BmPanorama)
    Vue.component('bm-control', BmControl)

    Vue.component('bm-marker', BmMarker)
    Vue.component('bm-point-collection', BmPointCollection)
    Vue.component('bm-polyline', BmPolyline)
    Vue.component('bm-polygon', BmPolygon)
    Vue.component('bm-circle', BmCircle)
    Vue.component('bm-ground', BmGround)
    Vue.component('bm-label', BmLabel)
    Vue.component('bm-info-window', BmInfoWindow)
    Vue.component('bm-overlay', BmOverlay)

    Vue.component('bm-context-menu', BmContextMenu)
    Vue.component('bm-context-menu-item', BmContextMenuItem)

    Vue.component('bm-local-search', BmLocalSearch)
    Vue.component('bm-transit', BmTransit)
    Vue.component('bm-walking', BmWalking)
    Vue.component('bm-driving', BmDriving)
    Vue.component('bm-bus', BmBus)

    Vue.component('bm-tile', BmTile)
    Vue.component('bm-traffic', BmTraffic)

    Vue.component('bm-auto-complete', BmAutoComplete)
    Vue.component('bm-boundary', BmBoundary)
  }
}

export {
  BaiduMap, BmView,
  BmScale, BmNavigation, BmMapType, BmOverviewMap, BmGeolocation, BmCopyright, BmCityList, BmPanorama, BmControl,
  BmMarker, BmPointCollection, BmPolyline, BmPolygon, BmCircle, BmGround, BmLabel, BmInfoWindow, BmOverlay,
  BmContextMenu, BmContextMenuItem,
  BmLocalSearch, BmTransit, BmWalking, BmDriving, BmBus,
  BmTile, BmTraffic,
  BmBoundary, BmAutoComplete
}

export {
  BmlMarkerClusterer,
  BmlLushu,
  BmlHeatmap,
  BmlCurveLine
}