import { getLocale, getTranslations, setRequestLocale } from "next-intl/server";
import { Link } from "@/i18n/navigation";
import { CopyButton } from "@/components/copy-button";
import { prisma } from "@/lib/prisma";
import { formatMoney, formatNumber } from "@/lib/money";
import { publicAppUrl, requireAdmin } from "@/lib/session";

export default async function AdminFilesPage({
  params,
}: {
  params: Promise<{ locale: string }>;
}) {
  const { locale } = await params;
  setRequestLocale(locale);
  await requireAdmin();
  const t = await getTranslations();
  const loc = await getLocale();
  const files = await prisma.fileAsset.findMany({
    include: { owner: true },
    orderBy: { createdAt: "desc" },
    take: 200,
  });
  const origin = await publicAppUrl();
  return (
    <div className="space-y-4">
      <h1 className="page-title">{t("admin.allFiles")}</h1>
      <div className="card overflow-x-auto">
        <table className="w-full min-w-[800px] text-sm">
          <thead className="text-muted">
            <tr>
              <th className="p-3 text-start">{t("admin.owner")}</th>
              <th className="p-3 text-start">{t("dashboard.file")}</th>
              <th className="p-3 text-start">{t("dashboard.code")}</th>
              <th className="p-3 text-start">{t("dashboard.downloads")}</th>
              <th className="p-3 text-start">{t("dashboard.earnings")}</th>
            </tr>
          </thead>
          <tbody>
            {files.map((file) => (
              <tr key={file.id} className="border-t border-line">
                <td className="p-3">{file.owner.email}</td>
                <td className="p-3">{file.originalName}</td>
                <td className="p-3">
                  <div className="flex items-center gap-2">
                    <span dir="ltr">{file.code}</span>
                    <CopyButton value={`${origin}/s/${file.code}`} />
                  </div>
                </td>
                <td className="p-3">{formatNumber(file.downloads, loc)}</td>
                <td className="p-3">{formatMoney(file.earningsMicro, loc)}</td>
              </tr>
            ))}
          </tbody>
        </table>
      </div>
      <Link href="/admin" className="text-brand">
        {t("common.back")}
      </Link>
    </div>
  );
}
