import type { App, Plugin } from 'vue'

import Divider from './src/Divider'
import type { MenuDividerProps } from './src/Divider'
import type { MenuItemGroupProps } from './src/ItemGroup'
import ItemGroup from './src/ItemGroup'
import type { MenuProps } from './src/Menu'
import Menu from './src/Menu'
import type { MenuItemProps } from './src/MenuItem'
import MenuItem from './src/MenuItem'
import type { SubMenuProps } from './src/SubMenu'
import SubMenu from './src/SubMenu'
import type { ItemType } from './src/hooks/useItems'
import type { MenuMode, MenuTheme } from './src/interface'

/* istanbul ignore next */
Menu.install = function (app: App) {
  app.component(Menu.name, Menu)
  app.component(MenuItem.name, MenuItem)
  app.component(SubMenu.name, SubMenu)
  app.component(Divider.name, Divider)
  app.component(ItemGroup.name, ItemGroup)
  return app
}

Menu.Item = MenuItem
Menu.Divider = Divider
Menu.SubMenu = SubMenu
Menu.ItemGroup = ItemGroup
export type {
  ItemType,
  MenuDividerProps,
  MenuItemGroupProps,
  MenuItemProps,
  MenuMode,
  MenuProps,
  MenuTheme,
  SubMenuProps,
}
export {
  Divider,
  MenuItem as Item,
  ItemGroup,
  Divider as MenuDivider,
  MenuItem,
  ItemGroup as MenuItemGroup,
  SubMenu,
}

export default Menu as typeof Menu &
  Plugin & {
    readonly Item: typeof MenuItem
    readonly SubMenu: typeof SubMenu
    readonly Divider: typeof Divider
    readonly ItemGroup: typeof ItemGroup
  }
