import { getLocale, getTranslations, setRequestLocale } from "next-intl/server";
import { Link } from "@/i18n/navigation";
import { StatCard } from "@/components/stat-card";
import { prisma } from "@/lib/prisma";
import { formatMoney, formatNumber } from "@/lib/money";
import { requireUser } from "@/lib/session";
import { visitSummary } from "@/lib/stats";
import { ensurePublisherKeys } from "@/lib/links";

export default async function DashboardPage({
  params,
}: {
  params: Promise<{ locale: string }>;
}) {
  const { locale } = await params;
  setRequestLocale(locale);
  const session = await requireUser();
  await ensurePublisherKeys(session.user.id);
  const t = await getTranslations();
  const loc = await getLocale();
  const [user, linkAgg, fileAgg, visits] = await Promise.all([
    prisma.user.findUniqueOrThrow({ where: { id: session.user.id } }),
    prisma.shortLink.aggregate({
      where: { ownerId: session.user.id },
      _sum: { earningsMicro: true, clicks: true },
    }),
    prisma.fileAsset.aggregate({
      where: { ownerId: session.user.id },
      _sum: { earningsMicro: true, downloads: true },
    }),
    visitSummary(session.user.id),
  ]);

  return (
    <div className="space-y-6">
      <h1 className="page-title">
        {t("dashboard.welcome")} {session.user.name}
      </h1>
      <div className="grid gap-4 sm:grid-cols-2 lg:grid-cols-4">
        <StatCard label={t("dashboard.balance")} value={formatMoney(user.balanceMicro, loc)} />
        <StatCard
          label={t("dashboard.linkEarnings")}
          value={formatMoney(linkAgg._sum.earningsMicro ?? 0, loc)}
        />
        <StatCard
          label={t("dashboard.fileEarnings")}
          value={formatMoney(fileAgg._sum.earningsMicro ?? 0, loc)}
        />
        <StatCard label={t("dashboard.visits")} value={formatNumber(visits.unique, loc)} />
      </div>
      <div className="grid gap-4 md:grid-cols-2">
        <Link href="/dashboard/tools/quick" className="card card-interactive block p-5">
          <h2 className="text-lg font-semibold">{t("tools.quick")}</h2>
          <p className="mt-2 text-sm text-muted">{t("dashboard.paidHint")}</p>
        </Link>
        <Link href="/dashboard/tools/free" className="card card-interactive block p-5">
          <h2 className="text-lg font-semibold">{t("tools.free")}</h2>
          <p className="mt-2 text-sm text-muted">{t("dashboard.freeHint")}</p>
        </Link>
        <Link href="/dashboard/tools/bulk" className="card card-interactive block p-5">
          <h2 className="text-lg font-semibold">{t("tools.bulk")}</h2>
          <p className="mt-2 text-sm text-muted">{t("tools.bulkText")}</p>
        </Link>
        <Link href="/market" className="card card-interactive block p-5">
          <h2 className="text-lg font-semibold">{t("market.title")}</h2>
          <p className="mt-2 text-sm text-muted">{t("market.intro")}</p>
        </Link>
        <Link href="/dashboard/shop" className="card card-interactive block p-5">
          <h2 className="text-lg font-semibold">{t("shop.title")}</h2>
          <p className="mt-2 text-sm text-muted">{t("shop.intro")}</p>
        </Link>
        <Link href="/dashboard/escrow" className="card card-interactive block p-5">
          <h2 className="text-lg font-semibold">{t("escrow.title")}</h2>
          <p className="mt-2 text-sm text-muted">{t("escrow.intro")}</p>
        </Link>
      </div>
      <div className="flex flex-wrap gap-3 text-sm">
        <Link className="text-brand" href="/dashboard/links">
          {t("nav.links")}
        </Link>
        <Link className="text-brand" href="/dashboard/files">
          {t("nav.files")}
        </Link>
        <Link className="text-brand" href="/dashboard/wallet">
          {t("nav.wallet")}
        </Link>
      </div>
    </div>
  );
}
