import { PremiumDeletionModal } from 'dbaas/screens/NextGen/premium/shared/deletion/DeletionModal'
import { PremiumChangeRootPwdModal } from 'dbaas/screens/NextGen/premium/shared/password/ChangeRootPwdModal'
import { PremiumRenameModal } from 'dbaas/screens/NextGen/premium/shared/rename/RenamingModal'
import { MoveTidbModal } from 'dbaas/screens/NextGen/tidbx-instance/shared/move'
import { TidbCloudOpenApinextgenv1beta2Tidb } from 'dbaas/services/api-clients/v2025/tidb-management/v1beta2/interface'

import { PremiumOperationType } from './operation-types'

interface PremiumOperationModalsProps {
  tidb: TidbCloudOpenApinextgenv1beta2Tidb
  controllers: Record<
    PremiumOperationType,
    {
      /**
       * Default to true, if false, the modal will not be rendered
       */
      rendered?: boolean
      opened: boolean
      close: () => void
      onFinish?: () => Promise<unknown> | void
    }
  >
}

export const PremiumOperationModals = ({ tidb, controllers }: PremiumOperationModalsProps) => {
  const { move, rename, password, deletion } = controllers

  return (
    <>
      {move.rendered !== false && (
        <MoveTidbModal tidb={tidb} opened={move.opened} onClose={move.close} onFinish={move.onFinish} />
      )}
      {rename.rendered !== false && (
        <PremiumRenameModal tidb={tidb} opened={rename.opened} onClose={rename.close} onFinish={rename.onFinish} />
      )}
      {password.rendered !== false && (
        <PremiumChangeRootPwdModal
          tidb={tidb}
          opened={password.opened}
          onClose={password.close}
          onFinish={password.onFinish}
        />
      )}
      {deletion.rendered !== false && (
        <PremiumDeletionModal
          tidb={tidb}
          opened={deletion.opened}
          onClose={deletion.close}
          onFinish={deletion.onFinish}
        />
      )}
    </>
  )
}
