import { listPlans } from "@/lib/db/queries/plans";
import { listFeatureCatalog } from "@/lib/db/queries/plan-features-catalog";
import { listPricingTiers } from "@/lib/db/queries/pricing-tiers";
import { logActivity } from "@/lib/db/audit";
import { getSession } from "@/lib/auth/session";
import { PlansGrid } from "./_components/plans-grid";

export const dynamic = "force-dynamic";

export default async function PlansPage() {
  const session = await getSession();
  let rows: Awaited<ReturnType<typeof listPlans>> = [];
  let catalog: Awaited<ReturnType<typeof listFeatureCatalog>> = [];
  // Grille per-seat : utilisée uniquement pour afficher le tarif réel du plan
  // `flex` (cf. mf_ask #128). On la charge à part et on tolère son échec — si
  // la table n'est pas lisible (GRANT pas encore propagé), la carte flex
  // affiche juste son bandeau sans la grille, au lieu de planter toute la page.
  let pricingTiers: Awaited<ReturnType<typeof listPricingTiers>> = [];
  let loadError: string | null = null;
  try {
    [rows, catalog] = await Promise.all([listPlans(), listFeatureCatalog()]);
    void logActivity({
      type: "superadmin.plans_list",
      title: "Lecture du référentiel plans",
      description: `${rows.length} plans lus`,
      user_id: session?.user.id,
    });
  } catch (err) {
    loadError = err instanceof Error ? err.message : "Erreur inconnue";
  }
  try {
    pricingTiers = await listPricingTiers();
  } catch {
    // Non bloquant : la grille per-seat reste optionnelle à l'affichage.
    pricingTiers = [];
  }

  return (
    <div className="px-6 py-6 lg:px-10">
      <header className="mb-6">
        <h1 className="text-2xl font-semibold">Plans</h1>
        <p className="text-sm text-muted-foreground">
          Tiers d&apos;abonnement (starter, pro, enterprise) et quotas associés.
          Cliquez sur « Modifier » pour ajuster les prix, les limites ou les
          fonctionnalités incluses.
        </p>
      </header>

      {loadError && (
        <div className="rounded-md border border-red-200 bg-danger-subtle px-4 py-3 text-sm text-danger">
          Impossible de charger les plans : {loadError}
        </div>
      )}

      {!loadError && rows.length === 0 && (
        <div className="rounded-md border border-border bg-surface px-4 py-8 text-center text-sm text-muted-foreground">
          Aucun plan configuré.
        </div>
      )}

      {!loadError && rows.length > 0 && (
        <PlansGrid
          rows={rows}
          featureCatalog={catalog}
          pricingTiers={pricingTiers}
        />
      )}
    </div>
  );
}
