"use client";

import { SessionProvider as Provider } from "next-auth/react";
import type { Session } from "next-auth";
import React from "react";

/**
 * Props for the SessionProvider component.
 * @typedef {Object} Props
 * @property {React.ReactNode} children - The child components to be rendered.
 * @property {Session | null} [session] - Optional session object from next-auth.
 */
type Props = {
  children: React.ReactNode;
  session?: Session | null;
};

/**
 * A wrapper component for next-auth's SessionProvider.
 * Provides session context to all child components.
 *
 * @param {Props} props - The component props.
 * @returns {React.ReactElement} The SessionProvider with children.
 */
export default function SessionProvider({
  children,
  session,
}: Props): React.ReactElement {
  // Memoize children to prevent unnecessary re-renders if they're static
  const memoizedChildren = React.useMemo(() => children, [children]);

  return <Provider session={session}>{memoizedChildren}</Provider>;
}
