import { apiFetch } from "@/lib/api/server";
import type { Announcement, Banner, CmsPage, Faq, HomepageSection } from "@/types/cms";
import type { PublicContactSettings, PublicGeneralSettings } from "@/types/settings";
import { cache } from "react";


// 60s: shared-hosting backend hits its process limit under concurrent
// requests (see server.ts's `revalidate` doc), so this content — all
// admin-edited, rarely changing minute-to-minute — is served from Next's
// fetch cache instead of hitting Laravel on every single visitor.
const CMS_REVALIDATE_SECONDS = 60;

/** GET /pages/{slug} — FR-CMS-003, public. */
export async function getPublicPage(slug: string) {
  return apiFetch<{ data: CmsPage }>(`/pages/${slug}`, { revalidate: CMS_REVALIDATE_SECONDS });
}

/** GET /faqs — FR-CMS-009, public, active only. */
export async function getPublicFaqs() {
  return apiFetch<{ data: Faq[] }>("/faqs", { revalidate: CMS_REVALIDATE_SECONDS });
}

/** GET /announcements — FR-CMS-013, public, active + within date window. */
export async function getPublicAnnouncements() {
  return apiFetch<{ data: Announcement[] }>("/announcements", { revalidate: CMS_REVALIDATE_SECONDS });
}

/** GET /banners — FR-CMS-008, public, active only. */
export async function getPublicBanners() {
  return apiFetch<{ data: Banner[] }>("/banners", { revalidate: CMS_REVALIDATE_SECONDS });
}

/** GET /homepage-sections — FR-CMS-007/014, public, visible only, in configured order. */
export async function getPublicHomepageSections() {
  return apiFetch<{ data: HomepageSection[] }>("/homepage-sections", { revalidate: CMS_REVALIDATE_SECONDS });
}

/** GET /settings/general — public subset needed to render Navbar/Footer (logo, copyright). */
export const getPublicGeneralSettings = cache(async () => {
  return apiFetch<{ data: PublicGeneralSettings }>("/settings/general", { revalidate: CMS_REVALIDATE_SECONDS });
});

/** GET /settings/contact — public subset needed for the Footer's "Contact us" line. */
export async function getPublicContactSettings() {
  return apiFetch<{ data: PublicContactSettings }>("/settings/contact", { revalidate: CMS_REVALIDATE_SECONDS });
}
