import { Form, Input } from 'antd'

import { createDedicatedToPremiumPrecheck } from 'apiClient/services/devops'
import type { ClusterCreateDedicatedToPremiumPrecheckReq } from 'apiClient/services/devops/interface'
import ModalForm from 'components/ModalForm'
import { ClusterSearchInput } from 'components/ResourceSearchInput/DevOps/ClusterSearchInput'

interface CreatePrecheckModalProps {
  visible: boolean
  onCancel: () => void
  onCreated: (precheckId: string) => void
}

const numericIdRule = {
  pattern: /^\d+$/,
  message: 'Please input a numeric ID'
}

export default function CreatePrecheckModal({
  visible,
  onCancel,
  onCreated
}: CreatePrecheckModalProps) {
  const handleSubmit = async (
    values: ClusterCreateDedicatedToPremiumPrecheckReq
  ) => {
    const response = await createDedicatedToPremiumPrecheck(values, {
      isShowMessage: true
    })

    onCreated(response.data.precheck!.id!)
  }

  return (
    <ModalForm<ClusterCreateDedicatedToPremiumPrecheckReq>
      title="Create Migration Precheck"
      name="createMigrationPrecheck"
      visible={visible}
      okText="Create"
      width={640}
      layout={{
        labelCol: { span: 9 },
        wrapperCol: { span: 15 }
      }}
      onCancel={onCancel}
      onSubmit={handleSubmit}
      getFields={() => (
        <>
          <Form.Item
            label="Source Dedicated Cluster ID"
            name="source_cluster_id"
            rules={[
              { required: true, message: 'Please input source cluster ID' },
              numericIdRule
            ]}
          >
            <ClusterSearchInput />
          </Form.Item>
          <Form.Item
            label="Customer Migration Account Email"
            name="migration_account_email"
            rules={[
              { type: 'email', message: 'Please input a valid email address' }
            ]}
          >
            <Input placeholder="migration@pingcap.com" />
          </Form.Item>
          <Form.Item
            label="Target Premium Project ID"
            name="target_premium_project_id"
            rules={[numericIdRule]}
          >
            <Input placeholder="Please input Premium project ID" />
          </Form.Item>
        </>
      )}
    />
  )
}
