"use client";

import { useEffect } from "react";

import { useProjects } from "@/components/projects/projects-context";
import { useThemeScope } from "./theme-provider";

/**
 * Temporarily scopes the app's theme (see ThemeProvider in
 * theme-provider.tsx) to the project's assigned theme while that project's
 * page is on screen. The theme lifts the moment you navigate away, so the
 * rest of the app (Home, other projects) keeps the user's global
 * preference.
 *
 * The theme is read from the live ProjectsContext -- not a page prop -- so
 * picking a new theme in the picker transforms the page *immediately*,
 * without waiting for the server re-render after the action settles.
 * `null` (the "Default theme" state) is a no-op: the page follows the
 * global theme, and changing the global theme from the theme menu while on
 * the page takes effect here too.
 *
 * The provider never learns the preference from this component (the global
 * `theme` state and localStorage are untouched).
 */
export function ProjectThemeScope({ projectId }: { projectId: string }) {
  const { projects } = useProjects();
  const { setScope } = useThemeScope();

  const theme = projects.find((p) => p.id === projectId)?.theme ?? null;

  useEffect(() => {
    setScope(theme);
    return () => setScope(null);
  }, [theme, setScope]);

  return null;
}
