<script lang="ts" setup>
import type { TreeOption } from 'naive-ui'
import Tree from '@/components/Tree/index.vue'
import { useBase } from './hooks/base'
import { useEarth } from '../Earth/hooks/earth'
import { parseWKT } from '@/utils/parseWKT'

const { isLoading, treeData, allKeys, addBaseFacilities } = useBase()

watch(allKeys, val => {
  nextTick(() => {
    checkedKeys.value = val
  })
})
// onMounted(() => {
//   nextTick(() => {
//     console.log(allKeys, 'val---')
//     checkedKeys.value = allKeys.value
//   })
// })
const checkedKeys = ref<Array<string | number>>([])

watch(checkedKeys, val => {
  addBaseFacilities(val)
})

const { flyTo } = useEarth()
const nodeProps = ({ option }: { option: TreeOption }) => {
  return {
    onclick: () => {
      if (option.children) {
        return
      }
      const {
        dataId,
        data: { geom },
      } = option
      const [lon, lat] = parseWKT(geom).coordinates

      if (checkedKeys.value.includes(dataId as string)) {
        flyTo({ lon, lat })
      }
    },
  }
}
</script>

<template>
  <div class="w-h-full" v-loading="isLoading">
    <tree
      :data="treeData"
      :key-field="'dataId'"
      :label-field="'nodeName'"
      v-model:checked="checkedKeys"
      :defaultCheckedKeys="allKeys"
      showSearch
      :nodeProps="nodeProps"
    />
  </div>
</template>

<style lang="scss" scoped></style>