import { getLocale, getTranslations, setRequestLocale } from "next-intl/server";
import { Link } from "@/i18n/navigation";
import { adminPayoutAction, saveRateAction, saveSettingsAction } from "@/app/actions";
import { saveEscrowSettingsAction } from "@/app/escrow-actions";
import { AdminRateBoard } from "@/components/rate-boards";
import { StatCard } from "@/components/stat-card";
import { getSetting } from "@/lib/earnings";
import { prisma } from "@/lib/prisma";
import { formatMoney, formatNumber } from "@/lib/money";
import { requireAdmin } from "@/lib/session";
import { visitSummary } from "@/lib/stats";

export default async function AdminPage({
  params,
}: {
  params: Promise<{ locale: string }>;
}) {
  const { locale } = await params;
  setRequestLocale(locale);
  const session = await requireAdmin();
  const t = await getTranslations();
  const loc = await getLocale();
  const [users, links, files, payouts, rates, visits, countdown, minPayout, myLinks, usdtWallet, usdtNetwork, escrowFee, siteName, appUrl] =
    await Promise.all([
      prisma.user.count(),
      prisma.shortLink.count(),
      prisma.fileAsset.count(),
      prisma.payoutRequest.findMany({
        where: { status: "PENDING" },
        include: { user: true },
        orderBy: { createdAt: "desc" },
      }),
      prisma.$queryRaw<
        Array<{
          countryCode: string;
          nameAr: string;
          nameEn: string;
          cpmUsd: number;
          cpmLinkUsd: number | null;
          cpmFileUsd: number | null;
        }>
      >`
        SELECT countryCode, nameAr, nameEn, cpmUsd, cpmLinkUsd, cpmFileUsd
        FROM CountryRate
        ORDER BY cpmUsd DESC
      `,
      visitSummary(),
      getSetting("countdownSeconds", "5"),
      getSetting("minPayoutUsd", "5"),
      prisma.shortLink.findMany({
        where: { ownerId: session.user.id },
        orderBy: { createdAt: "desc" },
        take: 8,
      }),
      getSetting("usdtWallet", ""),
      getSetting("usdtNetwork", "TRC20"),
      getSetting("escrowFeePercent", "5"),
      getSetting("siteName", "Earnvato"),
      getSetting("appUrl", process.env.NEXT_PUBLIC_APP_URL ?? "http://localhost:3000"),
    ]);

  return (
    <div className="space-y-8">
      <h1 className="page-title">{t("admin.title")}</h1>
      <div className="grid gap-4 sm:grid-cols-2 lg:grid-cols-4">
        <StatCard label={t("admin.users")} value={formatNumber(users, loc)} />
        <StatCard label={t("admin.allLinks")} value={formatNumber(links, loc)} />
        <StatCard label={t("admin.allFiles")} value={formatNumber(files, loc)} />
        <StatCard
          label={t("admin.platformEarnings")}
          value={formatMoney(visits.earningsMicro, loc)}
        />
      </div>
      <div className="flex flex-wrap gap-3 text-sm">
        <Link className="rounded-full bg-brand px-4 py-2 text-white" href="/admin/links">
          {t("admin.allLinks")}
        </Link>
        <Link className="rounded-full border border-line px-4 py-2" href="/admin/files">
          {t("admin.allFiles")}
        </Link>
        <Link className="rounded-full border border-line px-4 py-2" href="/admin/users">
          {t("admin.users")}
        </Link>
        <Link className="rounded-full border border-line px-4 py-2" href="/admin/visits">
          {t("admin.visits")}
        </Link>
        <Link className="rounded-full border border-line px-4 py-2" href="/admin/chat">
          {t("nav.chat")}
        </Link>
        <Link className="rounded-full border border-line px-4 py-2" href="/admin/escrow">
          {t("nav.escrow")}
        </Link>
      </div>

      <section className="card p-5">
        <h2 className="mb-4 font-semibold">{t("admin.settings")}</h2>
        <form action={saveSettingsAction} className="flex flex-wrap items-end gap-3">
          <label className="text-sm">
            {t("admin.siteName")}
            <input
              name="siteName"
              defaultValue={siteName}
              className="mt-1 block w-48 rounded-xl border border-line px-3 py-2"
            />
          </label>
          <label className="text-sm">
            {t("admin.appUrl")}
            <input
              name="appUrl"
              defaultValue={appUrl}
              className="mt-1 block w-72 rounded-xl border border-line px-3 py-2"
              dir="ltr"
            />
          </label>
          <label className="text-sm">
            {t("admin.countdown")}
            <input
              name="countdown"
              defaultValue={countdown}
              className="mt-1 block rounded-xl border border-line px-3 py-2"
            />
          </label>
          <label className="text-sm">
            {t("admin.minPayout")}
            <input
              name="minPayoutUsd"
              defaultValue={minPayout}
              className="mt-1 block rounded-xl border border-line px-3 py-2"
            />
          </label>
          <button className="rounded-full bg-brand px-4 py-2 text-white">{t("admin.save")}</button>
        </form>
      </section>

      <section className="card p-5">
        <h2 className="mb-4 font-semibold">{t("escrow.settings")}</h2>
        <form action={saveEscrowSettingsAction} className="flex flex-wrap items-end gap-3">
          <label className="text-sm">
            {t("escrow.network")}
            <input
              name="usdtNetwork"
              defaultValue={usdtNetwork}
              className="mt-1 block rounded-xl border border-line px-3 py-2"
            />
          </label>
          <label className="text-sm">
            {t("escrow.siteWallet")}
            <input
              name="usdtWallet"
              defaultValue={usdtWallet}
              className="mt-1 block w-72 rounded-xl border border-line px-3 py-2"
              dir="ltr"
            />
          </label>
          <label className="text-sm">
            {t("escrow.feePercent")}
            <input
              name="escrowFeePercent"
              defaultValue={escrowFee}
              className="mt-1 block rounded-xl border border-line px-3 py-2"
            />
          </label>
          <button className="rounded-full bg-brand px-4 py-2 text-white">{t("admin.save")}</button>
        </form>
      </section>

      <section className="card overflow-x-auto">
        <h2 className="p-4 font-semibold">{t("admin.payouts")}</h2>
        <table className="w-full min-w-[700px] text-sm">
          <thead className="text-muted">
            <tr>
              <th className="p-3 text-start">{t("admin.owner")}</th>
              <th className="p-3 text-start">{t("wallet.amount")}</th>
              <th className="p-3 text-start">{t("wallet.method")}</th>
              <th className="p-3 text-start">{t("wallet.details")}</th>
              <th className="p-3 text-start">{t("common.actions")}</th>
            </tr>
          </thead>
          <tbody>
            {payouts.map((row) => (
              <tr key={row.id} className="border-t border-line">
                <td className="p-3">{row.user.email}</td>
                <td className="p-3">{formatMoney(row.amountMicro, loc)}</td>
                <td className="p-3">{row.method}</td>
                <td className="p-3">{row.details}</td>
                <td className="p-3">
                  <div className="flex gap-2">
                    <form action={adminPayoutAction}>
                      <input type="hidden" name="id" value={row.id} />
                      <input type="hidden" name="status" value="APPROVED" />
                      <button className="text-brand">{t("admin.approve")}</button>
                    </form>
                    <form action={adminPayoutAction}>
                      <input type="hidden" name="id" value={row.id} />
                      <input type="hidden" name="status" value="REJECTED" />
                      <button className="text-red-700">{t("admin.reject")}</button>
                    </form>
                  </div>
                </td>
              </tr>
            ))}
          </tbody>
        </table>
      </section>

      <AdminRateBoard
        title={t("admin.linkRates")}
        kind="LINK"
        locale={locale}
        countryLabel={t("rates.country")}
        cpmLabel={t("rates.perThousand")}
        saveLabel={t("admin.save")}
        rates={rates}
        action={saveRateAction}
      />
      <AdminRateBoard
        title={t("admin.fileRates")}
        kind="FILE"
        locale={locale}
        countryLabel={t("rates.country")}
        cpmLabel={t("rates.perThousand")}
        saveLabel={t("admin.save")}
        rates={rates}
        action={saveRateAction}
      />

      <section className="card p-5">
        <h2 className="mb-3 font-semibold">{t("dashboard.byCountry")}</h2>
        <ul className="space-y-2 text-sm">
          {visits.byCountry.map((row) => (
            <li key={row.country} className="flex justify-between">
              <span>{row.country}</span>
              <span>
                {formatNumber(row._count._all, loc)} · {formatMoney(row._sum.earnedMicro ?? 0, loc)}
              </span>
            </li>
          ))}
        </ul>
      </section>

      <section className="card p-5">
        <h2 className="mb-3 font-semibold">{t("admin.myLinks")}</h2>
        <ul className="space-y-2 text-sm">
          {myLinks.map((link) => (
            <li key={link.id} className="flex justify-between gap-3">
              <span dir="ltr">{link.code}</span>
              <span>{formatMoney(link.earningsMicro, loc)}</span>
            </li>
          ))}
        </ul>
      </section>
    </div>
  );
}
