import { IconClipboardCheck, IconFolder, IconSettings02, IconWallet03 } from '@tidbcloud/uikit/icons'

import { useAccessCheck } from 'dbaas/contexts/access-control'
import { AUTH_METHOD_TYPE, ENTITY_STATUS } from 'dbaas/features/Organization'
import { useNextGenMode } from 'dbaas/features/Organization/mode'
import { NavItemProps } from 'dbaas/layouts/v5/SideNavbar/components/NavMenu'
import { useShowAuthMethods } from 'dbaas/services/account'
import useStores from 'dbaas/stores/useStores'

export function useOrgSettingsNavList() {
  const {
    store: {
      lastVisitLocation: { orgId },
      config: { enableCloudOrgSSO, premiumEnabled }
    }
  } = useStores()
  const { isNextGen } = useNextGenMode()

  const { data: scimEnabled } = useShowAuthMethods(orgId, {
    query: {
      select: (data) =>
        data?.auth_methods?.some((el) => {
          return el.type === AUTH_METHOD_TYPE.SAML && el.scim_provision && el.status === ENTITY_STATUS.ENABLE
        })
    }
  })

  const billingAccessible = useAccessCheck('OrgBillingGate')
  const auditAccessible = useAccessCheck('OrgAuditGate')
  const apiKeysV2Accessible = useAccessCheck('OrgAPIKeysV2Gate')

  const isApiKeysAccessible = isNextGen || premiumEnabled ? apiKeysV2Accessible : true

  const basePath = '/org-settings'
  const enabledNavList: NavItemProps[] = [
    {
      path: `${basePath}/projects`,
      label: 'Projects',
      leftSection: <IconFolder size={16} />,
      'data-mp-event': 'Org Settings Projects nav clicked'
    },
    {
      path: `${basePath}/billing`,
      label: 'Billing',
      leftSection: <IconWallet03 size={16} />,
      hidden: !billingAccessible,
      'data-mp-event': 'Org Settings Billing nav clicked'
    },
    {
      path: `${basePath}/audit-log`,
      label: 'Console Audit Logging',
      leftSection: <IconClipboardCheck size={16} />,
      hidden: !auditAccessible,
      'data-mp-event': 'Org Settings Audit Log nav clicked'
    },
    {
      path: `${basePath}`,
      label: 'Organization Settings',
      leftSection: <IconSettings02 size={16} />,
      children: [
        {
          path: `${basePath}/general`,
          label: 'General',
          leftSection: <IconSettings02 size={16} />,
          'data-mp-event': 'Org Settings General nav clicked'
        },
        {
          path: `${basePath}/users`,
          label: 'Users',
          'data-mp-event': 'Org Settings Users nav clicked'
        },
        {
          path: `${basePath}/groups`,
          label: 'Groups',
          hidden: !enableCloudOrgSSO || !scimEnabled,
          'data-mp-event': 'Org Settings Groups nav clicked'
        },
        {
          path: `${basePath}/api-keys`,
          label: 'API Keys',
          hidden: !isApiKeysAccessible,
          'data-mp-event': 'Org Settings API Keys nav clicked'
        },
        {
          path: `${basePath}/authentication`,
          label: 'Authentication',
          hidden: !enableCloudOrgSSO,
          'data-mp-event': 'Org Settings Authentication nav clicked'
        }
      ]
    }
  ]

  return enabledNavList
}
