import { desc, inArray } from "drizzle-orm";
import { getDb } from "../../db";
import { applicationDocuments, applications } from "../../db/schema";
import { ADMIN_EMAIL } from "../../lib/workflow";
import {
  chatGPTSignOutPath,
  requireChatGPTUser,
} from "../chatgpt-auth";
import { Dashboard } from "./Dashboard";

export const dynamic = "force-dynamic";

async function AdminWorkspace() {
  const user = await requireChatGPTUser("/admin");
  if (user.email.toLowerCase() !== ADMIN_EMAIL) {
    return (
      <main className="access-page" dir="rtl">
        <div className="access-card">
          <span className="access-mark">C+</span>
          <small>Compétences+ • Administration</small>
          <h1>هاد الحساب ما عندوش صلاحية الإدارة</h1>
          <p>
            لوحة التسجيلات محمية ومخصصة للحساب الإداري ديال Compétences+ فقط.
          </p>
          <a className="button primary" href={chatGPTSignOutPath("/admin")}>
            تسجيل الخروج والدخول بالحساب الإداري
          </a>
        </div>
      </main>
    );
  }

  let rows: ((typeof applications.$inferSelect) & {
    documents: (typeof applicationDocuments.$inferSelect)[];
  })[] = [];
  let databaseReady = true;
  try {
    const db = getDb();
    const applicationRows = await db
      .select()
      .from(applications)
      .orderBy(desc(applications.createdAt), desc(applications.id))
      .limit(250);
    const ids = applicationRows.map((item) => item.id);
    const documents = ids.length
      ? await db
          .select()
          .from(applicationDocuments)
          .where(inArray(applicationDocuments.applicationId, ids))
      : [];
    rows = applicationRows.map((application) => ({
      ...application,
      documents: documents.filter((document) => document.applicationId === application.id),
    }));
  } catch {
    databaseReady = false;
  }

  return (
    <Dashboard
      initialApplications={rows}
      adminName={user.fullName || "فريق Compétences+"}
      databaseReady={databaseReady}
      signOutPath={chatGPTSignOutPath("/")}
    />
  );
}

export default function AdminPage() {
  return <AdminWorkspace />;
}
