export const dynamic = "force-dynamic";

import { Query } from "node-appwrite";

import { requireTenant } from "@/lib/appwrite/tenant-guard";
import { listCustomers } from "@/lib/appwrite/customer-queries";
import { listProperties } from "@/lib/appwrite/property-queries";
import { DATABASE_ID, TABLES, type Presentation } from "@/lib/appwrite/schema";
import { createAdminClient } from "@/lib/appwrite/server";
import { PresentationsClient } from "@/components/presentations/presentations-client";
import { checkLimit, PLAN_LIMITS } from "@/lib/plans";

export default async function PresentationsPage() {
  const ctx = await requireTenant();
  const { tablesDB } = createAdminClient();

  const [customers, properties, presResult, limitResult] = await Promise.all([
    listCustomers(ctx.tenantId),
    listProperties(ctx.tenantId),
    tablesDB.listRows({
      databaseId: DATABASE_ID,
      tableId: TABLES.presentations,
      queries: [
        Query.equal("tenantId", ctx.tenantId),
        Query.orderDesc("$createdAt"),
        Query.limit(200),
      ],
    }),
    checkLimit(ctx.tenantId, ctx.settings?.plan, "presentations"),
  ]).catch((e) => {
    console.error("[PresentationsPage] data fetch failed:", e);
    throw e;
  });

  const presentations = JSON.parse(JSON.stringify(presResult.rows)) as Presentation[];
  const plan = ctx.settings?.plan ?? "free";
  const presLimit = PLAN_LIMITS[plan].presentations;

  return (
    <div className="flex flex-1 flex-col gap-4 p-4 md:p-6">
      <PresentationsClient
        initialPresentations={presentations}
        customers={customers}
        properties={properties}
        isOwner={ctx.role === "owner"}
        usageLimit={presLimit !== Infinity ? { current: limitResult.current, limit: presLimit } : undefined}
      />
    </div>
  );
}
