import { getTranslations, setRequestLocale } from "next-intl/server";
import { notFound } from "next/navigation";
import { Link } from "@/i18n/navigation";
import { escrowAdminAction } from "@/app/escrow-actions";
import { EscrowChat } from "@/components/escrow-chat";
import { ESCROW_STATUS, getEscrowDeal, type EscrowStatus } from "@/lib/escrow";
import { requireAdmin } from "@/lib/session";

function statusKey(status: EscrowStatus) {
  return `status_${status}` as const;
}

export default async function AdminEscrowDealPage({
  params,
  searchParams,
}: {
  params: Promise<{ locale: string; id: string }>;
  searchParams: Promise<{ error?: string }>;
}) {
  const { locale, id } = await params;
  const query = await searchParams;
  setRequestLocale(locale);
  const session = await requireAdmin();
  const deal = await getEscrowDeal(id);
  if (!deal) notFound();
  const t = await getTranslations("escrow");

  return (
    <div className="space-y-6">
      <div>
        <p className="text-sm text-muted" dir="ltr">
          {deal.code}
        </p>
        <h1 className="page-title">{deal.title}</h1>
        <p className="mt-2">{t(statusKey(deal.status))}</p>
        {query.error ? <p className="mt-2 text-sm text-red-700">{t("errGeneric")}</p> : null}
      </div>
      <section className="card space-y-2 p-5 text-sm">
        <p className="whitespace-pre-wrap">{deal.details}</p>
        <p>
          {t("buyer")}: {deal.buyerName} — {deal.buyerEmail}
        </p>
        <p>
          {t("seller")}: {deal.sellerName} — {deal.sellerEmail}
        </p>
        <p dir="ltr">
          {t("amount")}: {deal.amountUsdt} · {t("fee")}: {deal.feeUsdt} · {t("sellerGets")}: {deal.sellerUsdt} USDT
        </p>
        <p dir="ltr">
          {t("sellerWallet")}: {deal.sellerWallet ?? t("none")}
        </p>
        <p dir="ltr">
          {t("txHash")}: {deal.buyerTx ?? t("none")}
        </p>
        <p dir="ltr">
          {t("payoutTx")}: {deal.payoutTx ?? t("none")}
        </p>
      </section>
      {deal.status === ESCROW_STATUS.FUNDS_HELD ? (
        <p className="rounded-2xl bg-brand/10 p-4 text-sm">{t("adminTellSeller")}</p>
      ) : null}
      {deal.status === ESCROW_STATUS.RELEASE_REQUESTED ? (
        <p className="rounded-2xl bg-gold/10 p-4 text-sm">{t("adminPaySeller")}</p>
      ) : null}

      {(deal.status === ESCROW_STATUS.PAYMENT_SENT || deal.status === ESCROW_STATUS.WAITING_PAYMENT) ? (
        <form action={escrowAdminAction}>
          <input type="hidden" name="id" value={deal.id} />
          <input type="hidden" name="intent" value="funds" />
          <button className="btn-primary">{t("confirmFunds")}</button>
        </form>
      ) : null}

      {deal.status === ESCROW_STATUS.RELEASE_REQUESTED ? (
        <form action={escrowAdminAction} className="card flex flex-wrap items-end gap-3 p-5">
          <input type="hidden" name="id" value={deal.id} />
          <input type="hidden" name="intent" value="release" />
          <label className="text-sm">
            {t("payoutTx")}
            <input name="payoutTx" className="mt-1 block rounded-xl border border-line px-3 py-2" dir="ltr" />
          </label>
          <button className="btn-primary">{t("release")}</button>
        </form>
      ) : null}

      {deal.status !== ESCROW_STATUS.COMPLETED && deal.status !== ESCROW_STATUS.CANCELLED ? (
        <form action={escrowAdminAction}>
          <input type="hidden" name="id" value={deal.id} />
          <input type="hidden" name="intent" value="cancel" />
          <button className="text-sm text-red-700">{t("cancel")}</button>
        </form>
      ) : null}
      <EscrowChat dealId={deal.id} viewerId={session.user.id} />
      <Link href="/admin/escrow" className="text-brand">
        {t("back")}
      </Link>
    </div>
  );
}
