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

export default async function FilesPage({
  params,
}: {
  params: Promise<{ locale: string }>;
}) {
  const { locale } = await params;
  setRequestLocale(locale);
  const session = await requireUser();
  const t = await getTranslations("dashboard");
  const loc = await getLocale();
  const files = await prisma.fileAsset.findMany({
    where: { ownerId: session.user.id },
    orderBy: { createdAt: "desc" },
  });
  const appUrl = await publicAppUrl();

  return (
    <div className="space-y-6">
      <h1 className="page-title">{t("uploadFile")}</h1>
      <div className="grid gap-4 lg:grid-cols-2">
        <UploadFileForm appUrl={appUrl} monetization="PAID" />
        <UploadFileForm appUrl={appUrl} monetization="FREE" />
      </div>
      <div className="card overflow-x-auto">
        <table className="w-full min-w-[700px] text-sm">
          <thead className="bg-background text-muted">
            <tr>
              <th className="p-3 text-start">{t("file")}</th>
              <th className="p-3 text-start">{t("code")}</th>
              <th className="p-3 text-start">{t("type")}</th>
              <th className="p-3 text-start">{t("downloads")}</th>
              <th className="p-3 text-start">{t("earnings")}</th>
              <th className="p-3 text-start">{t("stats")}</th>
            </tr>
          </thead>
          <tbody>
            {files.length === 0 ? (
              <tr>
                <td className="p-4 text-muted" colSpan={6}>
                  {t("noItems")}
                </td>
              </tr>
            ) : (
              files.map((file) => (
                <tr key={file.id} className="border-t border-line">
                  <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={`${appUrl}/s/${file.code}`} />
                    </div>
                  </td>
                  <td className="p-3">{file.monetization === "FREE" ? t("free") : t("paid")}</td>
                  <td className="p-3">{formatNumber(file.downloads, loc)}</td>
                  <td className="p-3">{formatMoney(file.earningsMicro, loc)}</td>
                  <td className="p-3">
                    <Link className="text-brand" href={`/dashboard/files/${file.id}`}>
                      {t("stats")}
                    </Link>
                  </td>
                </tr>
              ))
            )}
          </tbody>
        </table>
      </div>
    </div>
  );
}
