import {
  Adminapiv1beta2ImportAzureBlobAuthTypeEnum,
  Adminapiv1beta2ImportS3AuthTypeEnum,
  Adminapiv1beta2ImportSource,
  Adminapiv1beta2ImportSourceTypeEnum as PremiumImportSourceType,
  V1beta2ImportOSSAuthTypeEnum
} from 'dbaas/services/dataflow/interface'

import type { ImportFromCloudFormData } from './types'

export function normalizeImportSource(
  data: Pick<
    ImportFromCloudFormData,
    | 'storage_provider'
    | 'source_uri'
    | 's3_bucket_access_method'
    | 'aws_role_arn'
    | 'aws_access_key_id'
    | 'aws_secret_access_key'
    | 'aliyun_access_key_id'
    | 'aliyun_secret_access_key'
    | 'sasToken'
  >
): Adminapiv1beta2ImportSource | null {
  if (data.storage_provider === PremiumImportSourceType.ENUM_S3) {
    return {
      type: PremiumImportSourceType.ENUM_S3,
      s3: {
        uri: data.source_uri.trim(),
        ...(data.s3_bucket_access_method === 'manual'
          ? {
              auth_type: Adminapiv1beta2ImportS3AuthTypeEnum.ENUM_ROLE_ARN,
              role_arn: data.aws_role_arn?.trim() ?? ''
            }
          : {
              auth_type: Adminapiv1beta2ImportS3AuthTypeEnum.ENUM_ACCESS_KEY,
              access_key: {
                id: data.aws_access_key_id?.trim() ?? '',
                secret: data.aws_secret_access_key?.trim() ?? ''
              }
            })
      }
    }
  } else if (data.storage_provider === PremiumImportSourceType.ENUM_OSS) {
    return {
      type: PremiumImportSourceType.ENUM_OSS,
      oss: {
        uri: data.source_uri.trim(),
        authType: V1beta2ImportOSSAuthTypeEnum.ENUM_ACCESS_KEY,
        accessKey: {
          id: data.aliyun_access_key_id?.trim() ?? '',
          secret: data.aliyun_secret_access_key?.trim() ?? ''
        }
      }
    }
  } else if (data.storage_provider === PremiumImportSourceType.ENUM_AZURE_BLOB) {
    return {
      type: PremiumImportSourceType.ENUM_AZURE_BLOB,
      azureBlob: {
        uri: data.source_uri.trim(),
        authType: Adminapiv1beta2ImportAzureBlobAuthTypeEnum.ENUM_SAS_TOKEN,
        sasToken: data.sasToken?.trim() ?? ''
      }
    }
  }

  return null
}
