import type { PageSection } from "@/admin/types";
import {
  FOOTER_BLOCK_SLUG,
  PBEL_GUIDE_FOOTER_BLOCK_SLUG,
  sectionsHaveFooterBlock,
} from "@/lib/pageHasFooterBlock";

/** Per-page chrome options (Page Settings). */
export type PageSettings = {
  /** When false, hide the site default footer (and any page footer blocks). Default: true. */
  showFooter?: boolean;
};

/**
 * Normalize page settings. Missing / unknown values default to showing the footer.
 * Legacy `footerType` is ignored so existing pages keep the default footer.
 */
export function normalizePageSettings(raw: unknown): PageSettings {
  if (!raw || typeof raw !== "object" || Array.isArray(raw)) return {};
  const showFooter = (raw as { showFooter?: unknown }).showFooter;
  if (showFooter === false) return { showFooter: false };
  if (showFooter === true) return { showFooter: true };
  return {};
}

/** True unless explicitly set to false. */
export function resolveShowFooter(settings?: PageSettings | null): boolean {
  return settings?.showFooter !== false;
}

/** Hide Site Settings footer when toggle is OFF, or when a page-level footer block is present. */
export function shouldHideGlobalFooter(
  sections: PageSection[],
  settings?: PageSettings | null,
): boolean {
  if (!resolveShowFooter(settings)) return true;
  return sectionsHaveFooterBlock(sections);
}

/** When Show Default Footer is OFF, do not render page footer blocks either. */
export function shouldRenderFooterBlock(
  slug: string,
  settings?: PageSettings | null,
): boolean {
  if (resolveShowFooter(settings)) return true;
  return slug !== FOOTER_BLOCK_SLUG && slug !== PBEL_GUIDE_FOOTER_BLOCK_SLUG;
}
