import { asc, desc, eq } from "drizzle-orm";
import { redirect } from "next/navigation";
import { db } from "@/db";
import { donations, launcherApps, launcherSettings, sponsors } from "@/db/schema";
import { ensureSeedData, isAdmin } from "@/lib/server";
import AdminDashboard from "@/components/AdminDashboard";

export const dynamic = "force-dynamic";

export default async function AdminPage() {
  if (!(await isAdmin())) redirect("/");
  await ensureSeedData();
  const [[settings], apps, donationRows, sponsorRows] = await Promise.all([
    db.select({
      greeting: launcherSettings.greeting,
      subtitle: launcherSettings.subtitle,
      background: launcherSettings.background,
      accent: launcherSettings.accent,
      donationTitle: launcherSettings.donationTitle,
      donationDescription: launcherSettings.donationDescription,
      saweriaUrl: launcherSettings.saweriaUrl,
      splashLogo: launcherSettings.splashLogo,
      splashTagline: launcherSettings.splashTagline,
      splashEnabled: launcherSettings.splashEnabled,
      secretCommand: launcherSettings.secretCommand,
      adminUsername: launcherSettings.adminUsername,
      loginMaxAttempts: launcherSettings.loginMaxAttempts,
      lockMinutes: launcherSettings.lockMinutes,
    }).from(launcherSettings).where(eq(launcherSettings.id, 1)).limit(1),
    db.select({
      id: launcherApps.id, name: launcherApps.name, description: launcherApps.description,
      url: launcherApps.url, icon: launcherApps.icon, color: launcherApps.color,
      logoImage: launcherApps.logoImage, position: launcherApps.position, enabled: launcherApps.enabled,
    }).from(launcherApps).orderBy(asc(launcherApps.position)),
    db.select({
      id: donations.id, donorName: donations.donorName, amount: donations.amount,
      message: donations.message, status: donations.status, donatedAt: donations.donatedAt,
    }).from(donations).orderBy(desc(donations.donatedAt)),
    db.select({
      id: sponsors.id, name: sponsors.name, image: sponsors.image,
      link: sponsors.link, position: sponsors.position, enabled: sponsors.enabled,
    }).from(sponsors).orderBy(asc(sponsors.position)),
  ]);
  return <AdminDashboard apps={apps} settings={settings} donations={donationRows} sponsors={sponsorRows} />;
}
