import { ProcessedHeaderFooterHomeData } from "@/src/lib/types/header";
import { cleanFranchiseeId, extractDomain, extractFranchiseeId, extractFranchiseeIdFromHeaders } from "./utils/domain";
import { headerFooterService } from "./services/headerFooterService";



/**
 * Fetch header/footer/banner data for PAGES
 * Accepts searchParams from page props
 */
export async function fetchHeaderFooterHomeData(
  searchParams?: Record<string, string | string[]>
): Promise<ProcessedHeaderFooterHomeData> {
  const domain = await extractDomain();

  // Note: We still pass rawId from searchParams here to ensure immediate page-level context,
  // but the API client will also fallback to headers/cookies automatically.
  const rawId = searchParams ? extractFranchiseeId(searchParams) : null;
  const cleanedId = cleanFranchiseeId(rawId);

  return headerFooterService.fetchByDomain(domain, cleanedId);
}

/**
 * Fetch header/footer/banner data for LAYOUTS
 * Reads franchiseeId from middleware headers automatically
 */
export async function fetchHeaderFooterForLayout(): Promise<ProcessedHeaderFooterHomeData> {
  const domain = await extractDomain();

  // We don't need to manually extract franchiseeId from headers here anymore!
  // The headerFooterService uses apiClient, which has an interceptor 
  // that will automatically inject the x-franchisee-id header context.
  return headerFooterService.fetchByDomain(domain);
}

/**
 * Retrieves the current global context from middleware headers.
 * Used as a fallback when URL parameters are missing (Silent Persistence).
 */
export async function getGlobalParams() {
  const { headers } = await import("next/headers");
  const headersList = await headers();

  const lang = headersList.get("x-lang") || "default";
  const franchiseeId = headersList.get("x-franchisee-id") || null;

  return { lang, franchiseeId };
}
