var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
import React, { useState, useRef } from 'react';
import { Modal, Button, Radio } from 'antd';
import { getStorage } from '@component/utils';
import { useRequest, useSize } from 'ahooks';
import { isEmpty, compact, head, pick } from 'lodash';
import { GDMap } from '../map';
import style from './style.module.css';
import flagIcon from './flag.svg';
import { getIpPosition } from '../getIpPosition';
import './style.css';
// interface Props {
// 	lng?: string | number;
// 	lat?: string | number;
// 	address?: string;
// 	onConfirm:(data)=>void;
// 	onClose?: () => void;
// }
export default function Map(props) {
    const { onClose } = props;
    const size = useSize(document.body);
    const positionPickerRef = useRef();
    const [isModalVisible, setIsModalVisible] = useState(true);
    const [currentPos, setPos] = useState({});
    function f() {
        return __awaiter(this, void 0, void 0, function* () {
            const { lng, lat } = props;
            if (!isEmpty(compact([lng, lat]))) {
                return {
                    lng,
                    lat,
                    address,
                };
            }
            const position = getStorage('position');
            const array = position ? getStorage('position').split(',') : [];
            if (!isEmpty(array)) {
                return {
                    lng: array[0],
                    lat: array[1],
                    address: '',
                };
            }
            const coords = yield getIpPosition()
                .then(head)
                .then((result) => {
                return {
                    position: result.location.split(','),
                    formatted_address: result.formatted_address,
                };
            });
            if (!isEmpty(coords === null || coords === void 0 ? void 0 : coords.position)) {
                return {
                    lng: Number(coords.position[0]),
                    lat: Number(coords.position[1]),
                    address: coords.formatted_address,
                };
            }
            return {
                lng: 116.398784,
                lat: 39.910231,
                address: '',
            };
        });
    }
    const { data, loading } = useRequest(f, {
        onSuccess(response) {
            setPos(response);
        },
    });
    const { address = '', lng, lat } = currentPos;
    const onMapLoaded = (map) => {
        try {
            window.AMapUI.loadUI(['misc/PositionPicker'], function (PositionPicker) {
                positionPickerRef.current = new PositionPicker({
                    mode: 'dragMarker',
                    map: map,
                    iconStyle: {
                        //自定义外观
                        url: flagIcon,
                        ancher: [6, 32],
                        size: [32, 32],
                    },
                });
                positionPickerRef.current.on('success', function (positionResult = {}) {
                    const { address = '', position = {} } = positionResult;
                    setPos(Object.assign({ address }, position));
                });
                positionPickerRef.current.on('fail', function (positionResult = {}) {
                    const { address = '', position = {} } = positionResult;
                    setPos(Object.assign({ address }, position));
                });
                positionPickerRef.current.start();
            });
        }
        catch (e) {
            console.log(e, 'e');
        }
        map.plugin(['AMap.Autocomplete', 'AMap.LngLat'], function () {
            const auto = new AMap.Autocomplete({
                input: 'tipinput',
            });
            auto.on('select', select); //注册监听,当选中某条记录时会触发
            function select(e) {
                const poi = e.poi;
                setPos(Object.assign({ address: poi.name }, pick(poi.location, ['lng', 'lat'])));
                positionPickerRef.current.start(new AMap.LngLat(poi.location.lng, poi.location.lat));
            }
        });
    };
    function onChange(event) {
        positionPickerRef.current.setMode(event.target.value);
    }
    // 确定按钮的回调
    const confirmHandle = () => {
        props.onConfirm(currentPos);
        handleClose();
    };
    function handleClose() {
        if (onClose) {
            onClose();
        }
        else {
            setIsModalVisible(false);
        }
    }
    return (_jsx(Modal, Object.assign({ width: "90%", centered: true, title: _jsxs("div", Object.assign({ className: style['toolbar'] }, { children: [_jsx("div", { children: "\u9009\u62E9\u4F4D\u7F6E" }), _jsx(Radio.Group, { onChange: onChange, defaultValue: "dragMarker", options: [
                        { label: '拖拽Marker模式', value: 'dragMarker' },
                        { label: '拖拽地图模式', value: 'dragMap' },
                    ] })] })), bodyStyle: {
            height: (size === null || size === void 0 ? void 0 : size.height) ? (size === null || size === void 0 ? void 0 : size.height) * 0.8 : 500,
            padding: 0,
        }, open: isModalVisible, onOk: confirmHandle, onCancel: handleClose, footer: [
            _jsxs("span", Object.assign({ className: style['action'] }, { children: [_jsxs("span", { children: ["\u5F53\u524D\u9009\u62E9\u5730\u5740:", address] }), _jsxs("span", { children: ["\u7ECF\u7EAC\u5EA6:", lng && lat ? [lng, lat].join(',') : ''] })] }), "1"),
            _jsx(Button, Object.assign({ onClick: handleClose }, { children: "\u53D6\u6D88" }), "close"),
            _jsx(Button, Object.assign({ type: "primary", onClick: confirmHandle }, { children: "\u786E\u8BA4" }), "submit"),
        ] }, { children: _jsxs("div", Object.assign({ style: {
                height: '100%',
                position: 'relative',
            } }, { children: [_jsx("div", Object.assign({ className: "map-search-info" }, { children: _jsxs("div", Object.assign({ className: "map-search-input-item" }, { children: [_jsx("div", Object.assign({ className: "map-search-input-item-prepend" }, { children: _jsx("span", Object.assign({ className: "map-search-input-item-text" }, { children: "\u8BF7\u8F93\u5165\u5173\u952E\u5B57" })) })), _jsx("input", { id: "tipinput", type: "text", autoComplete: "off" })] })) })), !loading && (_jsx(GDMap, { aMapUI: true, containerClass: style['container'], loadedCallBack: onMapLoaded, options: {
                        resizeEnable: true,
                        center: [lng, lat],
                        zoom: 13,
                    } }))] })) })));
}