import type { ReactNode } from "react";
import { redirect } from "next/navigation";
import { DashboardAuthProvider } from "@/components/layout/dashboard-auth-context";
import { dashboardGuardDestination } from "@/lib/auth/dashboard-policy";
import { getServerSession } from "@/lib/auth/server-session";
import { isMonetizationApiConfigured } from "@/lib/auth/server-config";

export default async function DashboardLayout({
  children,
}: {
  children: ReactNode;
}) {
  const apiConfigured = isMonetizationApiConfigured();
  const validatedSession = apiConfigured ? await getServerSession() : null;
  const session = validatedSession
    ? {
        role: validatedSession.role,
        email: validatedSession.email,
        tenantCode: validatedSession.tenantCode,
        expiresAtMs: validatedSession.expiresAtMs,
        passwordSetupRequired: validatedSession.passwordSetupRequired,
      }
    : null;
  const destination = dashboardGuardDestination(
    apiConfigured,
    validatedSession,
  );
  if (destination) redirect(destination);

  return (
    <DashboardAuthProvider
      apiConfigured={apiConfigured}
      session={session}
      profile={validatedSession?.profile ?? null}
    >
      {children}
    </DashboardAuthProvider>
  );
}
