{"version":3,"sources":["../../src/hooks/useWallSettings.ts"],"names":[],"mappings":";;AA2CO,SAAS,gBAAgB,IAAA,EAAsD;AACpF,EAAA,MAAM,QAAA,GAAW,MAAM,QAAA,IAAY,0BAAA;AACnC,EAAA,MAAM,OAAA,GAAU,MAAM,OAAA,IAAW,KAAA;AAEjC,EAAA,MAAM,CAAC,aAAA,EAAe,qBAAqB,CAAA,GAAI,SAAS,KAAK,CAAA;AAC7D,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAI,SAAS,KAAK,CAAA;AAC1C,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAI,SAAS,KAAK,CAAA;AAE1C,EAAA,MAAM,OAAA,GAAU,YAAY,YAAY;AACtC,IAAA,IAAI;AACF,MAAA,MAAM,GAAA,GAAM,MAAM,KAAA,CAAM,QAAA,EAAU,EAAE,WAAA,EAAa,SAAA,EAAW,KAAA,EAAO,UAAA,EAAY,CAAA;AAC/E,MAAA,IAAI,CAAC,IAAI,EAAA,EAAI;AACb,MAAA,MAAM,IAAA,GAAoC,MAAM,GAAA,CAAI,IAAA,EAAK;AACzD,MAAA,qBAAA,CAAsB,CAAC,CAAC,IAAA,CAAK,aAAa,CAAA;AAAA,IAC5C,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,SAAA,GAAY,KAAA;AAChB,IAAA,KAAA,CAAM,UAAU,EAAE,WAAA,EAAa,WAAW,KAAA,EAAO,UAAA,EAAY,CAAA,CAC1D,IAAA,CAAK,SAAQ,GAAA,CAAI,EAAA,GAAK,IAAI,IAAA,EAAK,GAAI,IAAK,CAAA,CACxC,IAAA,CAAK,CAAC,IAAA,KAA6C;AAClD,MAAA,IAAI,SAAA,EAAW;AACf,MAAA,IAAI,IAAA,EAAM,qBAAA,CAAsB,CAAC,CAAC,KAAK,aAAa,CAAA;AAAA,IACtD,CAAC,CAAA,CACA,KAAA,CAAM,MAAM,MAAS,CAAA,CACrB,QAAQ,MAAM;AACb,MAAA,IAAI,CAAC,SAAA,EAAW,SAAA,CAAU,IAAI,CAAA;AAAA,IAChC,CAAC,CAAA;AACH,IAAA,OAAO,MAAM;AACX,MAAA,SAAA,GAAY,IAAA;AAAA,IACd,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,EAAA,MAAM,gBAAA,GAAmB,WAAA;AAAA,IACvB,OAAO,OAAA,KAAqB;AAC1B,MAAA,IAAI,CAAC,OAAA,EAAS;AACd,MAAA,SAAA,CAAU,IAAI,CAAA;AACd,MAAA,IAAI;AACF,QAAA,MAAM,GAAA,GAAM,MAAM,KAAA,CAAM,QAAA,EAAU;AAAA,UAChC,MAAA,EAAQ,MAAA;AAAA,UACR,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA,EAAmB;AAAA,UAC9C,WAAA,EAAa,SAAA;AAAA,UACb,MAAM,IAAA,CAAK,SAAA,CAAU,EAAE,aAAA,EAAe,SAAS;AAAA,SAChD,CAAA;AACD,QAAA,IAAI,IAAI,EAAA,EAAI;AACV,UAAA,MAAM,IAAA,GAAoC,MAAM,GAAA,CAAI,IAAA,EAAK;AACzD,UAAA,qBAAA,CAAsB,CAAC,CAAC,IAAA,CAAK,aAAa,CAAA;AAAA,QAC5C;AAAA,MACF,CAAA,SAAE;AACA,QAAA,SAAA,CAAU,KAAK,CAAA;AAAA,MACjB;AAAA,IACF,CAAA;AAAA,IACA,CAAC,UAAU,OAAO;AAAA,GACpB;AAEA,EAAA,OAAO,EAAE,aAAA,EAAe,MAAA,EAAQ,MAAA,EAAQ,kBAAkB,OAAA,EAAQ;AACpE","file":"useWallSettings.mjs","sourcesContent":["import { useCallback, useEffect, useState } from 'react';\n\nexport interface UseWallSettingsOptions {\n  /**\n   * GET/POST endpoint for the per-site wall settings. Defaults to\n   * '/api/admin/wall-settings'. The endpoint is hosted centrally by BFFless\n   * and forwarded to your project automatically once your alias references\n   * the wall-generation rule set.\n   */\n  endpoint?: string;\n  /**\n   * When true, the setter is callable. The endpoint itself enforces ownership\n   * via auth — this flag is just a UI guard so a non-admin doesn't see the\n   * \"save\" button at all.\n   */\n  isAdmin?: boolean;\n}\n\nexport interface UseWallSettingsResult {\n  /**\n   * Latest known value of the site's AI photobooth flag. Defaults to `false`\n   * until the GET resolves. Treat the wall as AI-off until `loaded` is true.\n   */\n  wallAiEnabled: boolean;\n  /** True once the initial GET completes (success or failure). */\n  loaded: boolean;\n  /** True while a save is in flight. */\n  saving: boolean;\n  /** Owner-only setter — POSTs and reflects the new value locally on success. */\n  setWallAiEnabled: (enabled: boolean) => Promise<void>;\n  /** Manual refetch. */\n  refresh: () => Promise<void>;\n}\n\n/**\n * Reads (and optionally writes) the per-site Wall feature settings stored on\n * the central `parents_sites` row keyed by the calling site's repo. Public\n * GET so the wall page can read it on every load; POST is owner-only via\n * `auth_required` + ownership guard on the central rule.\n *\n * Pair with `useWallToken({ enabled: settings.wallAiEnabled, ... })` to gate\n * the URL token capture and AI scene generation on the runtime flag.\n */\nexport function useWallSettings(opts?: UseWallSettingsOptions): UseWallSettingsResult {\n  const endpoint = opts?.endpoint ?? '/api/admin/wall-settings';\n  const isAdmin = opts?.isAdmin ?? false;\n\n  const [wallAiEnabled, setWallAiEnabledState] = useState(false);\n  const [loaded, setLoaded] = useState(false);\n  const [saving, setSaving] = useState(false);\n\n  const refresh = useCallback(async () => {\n    try {\n      const res = await fetch(endpoint, { credentials: 'include', cache: 'no-store' });\n      if (!res.ok) return;\n      const data: { wallAiEnabled?: boolean } = await res.json();\n      setWallAiEnabledState(!!data.wallAiEnabled);\n    } catch {\n      /* silent — keep last known value */\n    }\n  }, [endpoint]);\n\n  useEffect(() => {\n    let cancelled = false;\n    fetch(endpoint, { credentials: 'include', cache: 'no-store' })\n      .then(res => (res.ok ? res.json() : null))\n      .then((data: { wallAiEnabled?: boolean } | null) => {\n        if (cancelled) return;\n        if (data) setWallAiEnabledState(!!data.wallAiEnabled);\n      })\n      .catch(() => undefined)\n      .finally(() => {\n        if (!cancelled) setLoaded(true);\n      });\n    return () => {\n      cancelled = true;\n    };\n  }, [endpoint]);\n\n  const setWallAiEnabled = useCallback(\n    async (enabled: boolean) => {\n      if (!isAdmin) return;\n      setSaving(true);\n      try {\n        const res = await fetch(endpoint, {\n          method: 'POST',\n          headers: { 'Content-Type': 'application/json' },\n          credentials: 'include',\n          body: JSON.stringify({ wallAiEnabled: enabled }),\n        });\n        if (res.ok) {\n          const data: { wallAiEnabled?: boolean } = await res.json();\n          setWallAiEnabledState(!!data.wallAiEnabled);\n        }\n      } finally {\n        setSaving(false);\n      }\n    },\n    [endpoint, isAdmin],\n  );\n\n  return { wallAiEnabled, loaded, saving, setWallAiEnabled, refresh };\n}\n"]}