import { getServerlessServicePlan, SharedCluster } from 'dbaas/features/ClusterManagement/cluster'
import { ClusterDeletionModal } from 'dbaas/screens/Cluster/ClusterDeleteModal'
import { ClusterRenameModal } from 'dbaas/screens/Cluster/ClusterRenameModal'
import { MoveClusterModal } from 'dbaas/screens/NextGen/tidbx-instance/shared/move'

import { OperationModalController, OperationType } from './operation-types'

interface StarterOperationModalsProps {
  cluster: Required<SharedCluster>['serverless'] | undefined
  controllers: Record<Extract<OperationType, 'move' | 'rename' | 'deletion'>, OperationModalController>
}

export const StarterOperationModals = ({ cluster, controllers }: StarterOperationModalsProps) => {
  if (!cluster) {
    return null
  }

  const { move, rename, deletion } = controllers
  const clusterInfo = {
    id: cluster.clusterId!,
    name: cluster.displayName,
    servicePlan: getServerlessServicePlan(cluster)
  }

  return (
    <>
      {move.rendered !== false && (
        <MoveClusterModal cluster={cluster} opened={move.opened} onClose={move.close} onFinish={move.onFinish} />
      )}
      {rename.rendered !== false && (
        <ClusterRenameModal
          cluster={clusterInfo}
          opened={rename.opened}
          onClose={rename.close}
          onFinish={rename.onFinish}
        />
      )}
      {deletion.rendered !== false && (
        <ClusterDeletionModal
          cluster={clusterInfo}
          opened={deletion.opened}
          onClose={deletion.close}
          onFinish={deletion.onFinish}
        />
      )}
    </>
  )
}
