import type { HookParameters } from '@astrojs/starlight/types'

export function isSidebarSlugItemConfig(itemConfig: SidebarItemConfig): itemConfig is SidebarSlugItemConfig {
  return typeof itemConfig === 'string' || 'slug' in itemConfig
}

export function isSidebarLinkItemConfig(itemConfig: SidebarItemConfig): itemConfig is SidebarLinkItemConfig {
  return typeof itemConfig === 'object' && 'link' in itemConfig
}

export function isSidebarManualGroupConfig(itemConfig: SidebarItemConfig): itemConfig is SidebarManualGroupConfig {
  return typeof itemConfig === 'object' && 'items' in itemConfig
}

export function isSidebarAutogeneratedGroupConfig(
  itemConfig: SidebarItemConfig,
): itemConfig is SidebarAutogeneratedGroupConfig {
  return typeof itemConfig === 'object' && 'autogenerate' in itemConfig
}

export type SidebarUserConfig = NonNullable<HookParameters<'config:setup'>['config']['sidebar']>

export type SidebarItemConfig = SidebarUserConfig[number]
export type SidebarSlugItemConfig = Extract<SidebarItemConfig, string | { slug: string }>
export type SidebarLinkItemConfig = Extract<SidebarItemConfig, { link: string }>
export type SidebarManualGroupConfig = Extract<SidebarItemConfig, { items: SidebarItemConfig[] }>
export type SidebarAutogeneratedGroupConfig = Extract<SidebarItemConfig, { autogenerate: { directory: string } }>
