import { Map, MapMarker } from "react-kakao-maps-sdk";
import React, { useRef, useState, useEffect, useContext } from 'react';

const {kakao} = window;

function SearchMapByKeyword({loc, setLoc}){
    // 아주대학교를 기본 위치로 설정
    const [info, setInfo] = useState()
    const [markers, setMarkers] = useState([])
    const [map, setMap] = useState()
    const [searchKeyword, setSearchKeyword] = useState(); //주소 입력

    const defaultCenter = { lat: 37.28238488648025, lng: 127.04350967609274 }
    const ps = new kakao.maps.services.Places()

    const handleInput = (e) => {
        setSearchKeyword(e.target.value);
    }    

    const handleSearch = () => {
        ps.keywordSearch(searchKeyword, (data, status, _pagination) => {
        if (status === kakao.maps.services.Status.OK) {
          // 검색된 장소 위치를 기준으로 지도 범위를 재설정하기위해
          // LatLngBounds 객체에 좌표를 추가합니다
          const bounds = new kakao.maps.LatLngBounds()
          let markers = []
    
          for (var i = 0; i < data.length; i++) {
            // @ts-ignore
            markers.push({
              position: {
                lat: data[i].y,
                lng: data[i].x,
              },
              content: data[i].place_name,
            })
            // @ts-ignore
            bounds.extend(new kakao.maps.LatLng(data[i].y, data[i].x))
          }

          setMarkers(markers)
    
          // 검색된 장소 위치를 기준으로 지도 범위를 재설정합니다
          //map.setBounds(bounds)
        }
        })
    }

    return (
        <div className="UserInput">
            <input  onChange={handleInput}/>
            <button onClick={()=>handleSearch()}>검색</button><br></br>
            <input readOnly={true} type="text" placeholder="장소 키워드" value={loc.keyword}/>
            <input readOnly={true} type="text" placeholder="위도" value={loc.center.lat}/>
            <input readOnly={true} type="text" placeholder="경도" value={loc.center.lng}/>
            <Map // 지도를 표시할 Container
                center={markers[0] && markers[0].position || defaultCenter}
                style={{
                    // 지도의 크기
                    width: "450px",
                    height: "450px"
                    }}
                level={3}>
                {markers.map((marker) => (
                        <MapMarker
                        key={`marker-${marker.content}-${marker.position.lat},${marker.position.lng}`}
                        position={marker.position}

                        clickable={true} // 마커를 클릭했을 때 지도의 클릭 이벤트가 발생하지 않도록 설정합니다
                        // 마커에 마우스오버 이벤트를 등록합니다
                        onMouseOver={
                          // 마커에 마우스오버 이벤트가 발생하면 인포윈도우를 마커위에 표시합니다
                          () => setInfo(marker)
                        }
                        // 마커에 마우스아웃 이벤트를 등록합니다
                        onMouseOut={
                          // 마커에 마우스아웃 이벤트가 발생하면 인포윈도우를 제거합니다
                          () => setInfo(null)
                        }
                        onClick={() => {
                            setLoc({
                                keyword: marker.content,
                                center: { lat: marker.position.lat, lng: marker.position.lng }
                            })
                        }}>
                        {info &&info.content === marker.content && (
                            <div style={{color:"#000"}}>{marker.content}</div>
                        )}
                        </MapMarker>
                    ))}
            </Map>
        </div>
    )
}

export default SearchMapByKeyword