import { notFound } from "next/navigation"

import {
  getBankApiQuickActionDefinition,
  isBankApiFileUploadDefinition,
  isBankApiTxtToXmlDefinition,
} from "@/components/xml-apis/bank-api/data/bank-api-quick-actions"
import { BankApiNomuraTxtToXmlWorkspace } from "@/components/xml-apis/bank-api/quick-action/bank-api-nomura-txt-to-xml-workspace"
import { BankApiQuickActionUploadForm } from "@/components/xml-apis/bank-api/quick-action/bank-api-quick-action-upload-form"
import { BankApiTxtToXmlForm } from "@/components/xml-apis/bank-api/quick-action/bank-api-txt-to-xml-form"

type BankApiQuickActionPageProps = {
  searchParams: Promise<{
    bankId?: string
    action?: string
    bankName?: string
  }>
}

export default async function BankApiQuickActionPage({ searchParams }: BankApiQuickActionPageProps) {
  const params = await searchParams
  const bankId = params.bankId?.trim() ?? ""
  const actionId = params.action?.trim() ?? ""
  const bankName = params.bankName?.trim() ?? ""

  if (!bankId || !actionId || !bankName) {
    notFound()
  }

  const action = getBankApiQuickActionDefinition(bankName, actionId)
  if (!action) {
    notFound()
  }

  if (isBankApiTxtToXmlDefinition(action)) {
    if (action.variant === "nomura") {
      return <BankApiNomuraTxtToXmlWorkspace bankId={bankId} bankName={bankName} action={action} />
    }

    return <BankApiTxtToXmlForm bankId={bankId} bankName={bankName} action={action} />
  }

  if (!isBankApiFileUploadDefinition(action)) {
    notFound()
  }

  return (
    <BankApiQuickActionUploadForm bankId={bankId} bankName={bankName} action={action} />
  )
}
