import { ActionIcon } from '@tidbcloud/uikit'
import { IconDotsHorizontal } from '@tidbcloud/uikit/icons'

import { PremiumOperationMenu } from 'dbaas/screens/NextGen/premium/shared/operation/OperationMenu'
import { PremiumOperationModals } from 'dbaas/screens/NextGen/premium/shared/operation/OperationModals'
import { usePremiumOperationMenuItemsAccessible } from 'dbaas/screens/NextGen/premium/shared/operation/use-operation-menu-items-accessible'
import { usePremiumOperationMenuItemsEnabled } from 'dbaas/screens/NextGen/premium/shared/operation/use-operation-menu-items-enabled'
import { getSharedTiDB } from 'dbaas/screens/NextGen/shared/model/shared-tidb-state'
import { TidbCloudOpenApinextgenv1beta2Tidb } from 'dbaas/services/api-clients/v2025/tidb-management/v1beta2/interface'
import { MixpanelEvents } from 'dbaas/utils/tracking/event'

import { usePremiumListOperationModals } from './use-list-operation-modals'

interface PremiumListOperationProps {
  tidb: TidbCloudOpenApinextgenv1beta2Tidb
  onMenuOpen?: () => void
}

export const PremiumListOperation = ({ tidb: originTidb, onMenuOpen }: PremiumListOperationProps) => {
  const modals = usePremiumListOperationModals()
  const menuItemsEnabled = usePremiumOperationMenuItemsEnabled(originTidb)
  const menuItemsAccessible = usePremiumOperationMenuItemsAccessible(originTidb)
  const tidb = getSharedTiDB(originTidb)
  const servicePlan = tidb.servicePlan

  return (
    <>
      <PremiumOperationMenu
        servicePlan={servicePlan}
        onMenuOpen={onMenuOpen}
        menuTarget={
          <ActionIcon
            variant="subtle"
            size="input-xs"
            aria-label="TiDB Premium operation dropdown menu"
            data-mp-event={MixpanelEvents.TidbResource.Operate.EnterClicked}
            data-mp-service-plan={servicePlan}
          >
            <IconDotsHorizontal size={16} />
          </ActionIcon>
        }
        controllers={{
          move: {
            ...modals.move,
            disabled: !menuItemsEnabled.move || !menuItemsAccessible.move
          },
          rename: {
            ...modals.rename,
            disabled: !menuItemsEnabled.rename || !menuItemsAccessible.rename
          },
          password: {
            ...modals.password,
            disabled: !menuItemsEnabled.password || !menuItemsAccessible.password
          },
          deletion: {
            ...modals.deletion,
            disabled: !menuItemsAccessible.deletion
          }
        }}
      />
      <PremiumOperationModals
        tidb={tidb}
        controllers={{
          move: {
            ...modals.move,
            rendered: menuItemsEnabled.move && menuItemsAccessible.move
          },
          rename: {
            ...modals.rename,
            rendered: menuItemsEnabled.rename && menuItemsAccessible.rename
          },
          password: {
            ...modals.password,
            rendered: menuItemsEnabled.password && menuItemsAccessible.password
          },
          deletion: {
            ...modals.deletion,
            rendered: menuItemsAccessible.deletion
          }
        }}
      />
    </>
  )
}
