/* eslint-disable */
import React from 'react';
import { connect } from 'react-redux';
import { actionCreators } from '@/containers/App/store';
import _ from 'lodash';
// import { AMapScene } from '@wisdom-map/Amap';
import { ArcGISMap } from '@wisdom-map/arcgismap';
// import arcgisConfig from '@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/config';
// import pkg from '../../../package.json';
// arcgisConfig.assetsPath = `${window.location.origin}/${pkg.name.toLocaleLowerCase()}/assets`;
// window.arcgisAssetsPath = arcgisConfig.assetsPath;
class Map extends React.PureComponent {
  constructor(props) {
    super(props);
    this.options = _.merge({}, props.options);
    this.state = {
      type: props.options.type,
      loading: true,
      options: this.transformMapsetting(window.globalConfig.mapsettings),
      widgets: window.globalConfig.uiwidgets,
    }
  }

  transformMapsetting(mapsettings) {
    let layers = mapsettings.layers;
    layers = layers.map(item => {
      item.url = /^\//.test(item.url) ? `/${item.url}`: item.url;
      return item;
    })
    return Object.assign({}, mapsettings, {
      layers: layers
    });
  }

  destroyAMap() {
    // const mapKey = [
    //   '_AMap_AMap.MapType',
    //   '_AMap_labelcanvas',
    //   '_AMap_imagelayer',
    //   '_AMap_anole',
    //   '_AMap_AMap.Scale',
    //   '_AMap_rbush',
    //   '_AMap_AMap.IndoorMap',
    //   '_AMap_AMap.CustomLayer',
    //   '_AMap_AMap.MarkerClusterer',
    //   '_AMap_vectorlayer',
    //   '_AMap_AMap.OverView',
    //   '_AMap_sync',
    //   '_AMap_AMap.PlaceSearch',
    //   '_AMap_AMap.DistrictSearch',
    //   '_AMap_Map3D',
    //   '_AMap_AMap.Autocomplete',
    //   '_AMap_AMap.Heatmap',
    //   '_AMap_wgl',
    //   '_AMap_overlay',
    //   '_AMap_cvector',
    //   '_AMap_AMap.ToolBar',
    //   '_AMap_mouse',
    //   '_AMap_AMap.RangingTool',
    //   '_AMap_data.tileKeys'
    // ];
    // // eslint-disable-next-line no-plusplus
    // for (let i = 0; i < mapKey.length; i++) {
    //   localStorage.removeItem(mapKey[i]);
    // }
    // delete window.AMap;
    // delete window.AMapUI;
    // delete window.AMapUI_DEBUG;
  }

  componentWillMount() {
    // this.destroyAMap()
  }

  getAMap(AMapObj, AMap) {
    // this.props.updageMapView({
    //   AMapObj,
    //   AMap
    // });
  }

  getArcGISMap(map) {
    this.props.updageMapView(map);
  }

  show() {

  }

  hide() {

  }

  destroy() {

  }

  render() {
    return (
      <>
        {
          this.state.type === 'AMap' ? (
            <div {...this.state} getMapInfo={this.getAMap.bind(this)}/>
        ) : (
            <ArcGISMap config={this.state.options}  getMapInfo={this.getArcGISMap.bind(this)}/>
          )
        }
      </>
    )
  }
}
const mapStateToProps = state => ({});

const mapDispatchToProps = dispatch => ({
  updageMapView(mapView) {
    dispatch(actionCreators.updageMapView(mapView));
  },
});

export default connect(
  mapStateToProps,
  mapDispatchToProps,
)(Map);
