import { NavMenuPortal } from '@tidbcloud/uikit/biz'
import {
  IconClipboardCheck,
  IconHome04,
  IconServer02,
  IconSettings02,
  IconTool01,
  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, NavMenu } from 'dbaas/layouts/v5/SideNavbar/components/NavMenu'
import { useShowAuthMethods } from 'dbaas/services/account'
import useStores from 'dbaas/stores/useStores'

export function useSharedTopNavList() {
  const {
    store: {
      lastVisitLocation: { orgId },
      config: { enableCloudOrgSSO, BYOCEnabled, premiumEnabled, MyLakeEnabled }
    }
  } = 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 basePath = '/org-settings'
  const apiKeysV2Accessible = useAccessCheck('OrgAPIKeysV2Gate')

  const isApiKeysAccessible = isNextGen || premiumEnabled ? apiKeysV2Accessible : true
  const enabledNavList: NavItemProps[] = [
    {
      path: `/tidbs`,
      label: 'My TiDB',
      leftSection: <IconServer02 size={16} />,
      'data-mp-event': 'TiDBs nav clicked'
    },
    {
      path: '/lakes',
      label: 'My Lake',
      leftSection: <IconHome04 size={16} />,
      hidden: !MyLakeEnabled,
      'data-mp-event': 'My Lake nav clicked'
    },
    {
      path: `/byoc`,
      label: 'BYOC Management',
      leftSection: <IconTool01 size={16} />,
      hidden: !BYOCEnabled,
      'data-mp-event': 'BYOC Management nav clicked',
      children: [
        {
          path: '/byoc/resource-pools',
          label: 'Resource Pools',
          'data-mp-event': 'BYOC Resource Pools nav clicked'
        },
        {
          path: '/byoc/region-settings',
          label: 'Region Settings',
          hidden: !auditAccessible,
          'data-mp-event': 'BYOC Region Settings nav clicked'
        }
      ]
    },
    {
      path: `${basePath}/billing`,
      label: 'Billing',
      leftSection: <IconWallet03 size={16} />,
      hidden: !billingAccessible,
      'data-mp-event': 'Org Settings Billing nav clicked'
    },

    BYOCEnabled
      ? {
          path: `${basePath}/audit-log`,
          label: 'Console Audit Logging',
          leftSection: <IconClipboardCheck size={16} />,
          'data-mp-event': 'Console Audit Log 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'
        },
        {
          path: `${basePath}/integrations`,
          label: 'Integrations',
          'data-mp-event': 'Org Settings Integrations nav clicked'
        }
      ]
    }
  ]

  return enabledNavList
}

export const SharedTopNavMenu = () => {
  const enabledNavList = useSharedTopNavList()
  return (
    <NavMenuPortal>
      <NavMenu navList={enabledNavList} defaultOpenedSub />
    </NavMenuPortal>
  )
}
