import { ref, watch, computed, unref } from 'vue'
import { useRoute } from 'vue-router'
import { urlToList } from './utils'
import { useStore } from 'vuex'

export default function (props: { mainMenu: boolean }) {
  const route = useRoute()
  const store = useStore()
  function getDefaultOpenKeys(path: string) {
    return urlToList(path)
  }
  const { mainMenu } = props
  const collapsed = computed(() => store.state.app.isCollapsed)
  const openKeys = ref(getDefaultOpenKeys(route.path))
  if (mainMenu) {
    watch(
      () => route.path,
      () => {
        if (unref(collapsed)) return
        openKeys.value = getDefaultOpenKeys(route.path)
      }
    )
    watch(collapsed, () => {
      if (!collapsed.value) openKeys.value = getDefaultOpenKeys(route.path)
    })
  }
  // 处理菜单数据，只保持一个子菜单展开
  const handleOpenChange = (openKey: string[]) => {
    const result: string[] = []
    if (openKey.length) {
      const lastOpenKey = [...openKey].pop() as string
      openKey.forEach(item => {
        // 子菜单打开父菜单也需要展开 || 父菜单展开之前缓存的子菜单数据也要展开
        if (lastOpenKey.includes(item) || item.includes(lastOpenKey)) {
          result.push(item)
        }
      })
    }
    openKeys.value = result
  }
  return {
    openKeys,
    handleOpenChange
  }
}
