{"version":3,"sources":["../../src/hooks/useSceneBackgrounds.ts"],"names":[],"mappings":";;AAqBO,SAAS,oBAAoB,IAAA,EAA8D;AAChG,EAAA,MAAM,QAAA,GAAW,MAAM,QAAA,IAAY,6BAAA;AACnC,EAAA,MAAM,IAAA,GAAO,MAAM,IAAA,IAAQ,KAAA;AAC3B,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,QAAA,CAA4B,EAAE,CAAA;AAEpE,EAAA,MAAM,OAAA,GAAU,YAAY,YAAY;AACtC,IAAA,IAAI;AACF,MAAA,MAAM,MAAM,MAAM,KAAA,CAAM,UAAU,EAAE,KAAA,EAAO,YAAY,CAAA;AACvD,MAAA,MAAM,IAAA,GAA4C,MAAM,GAAA,CAAI,IAAA,EAAK;AACjE,MAAA,cAAA,CAAe,IAAA,CAAK,WAAA,IAAe,EAAE,CAAA;AAAA,IACvC,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,IAAA,EAAM;AACV,IAAA,OAAA,EAAQ;AAAA,EACV,CAAA,EAAG,CAAC,IAAA,EAAM,OAAO,CAAC,CAAA;AAElB,EAAA,MAAM,GAAA,GAAM,WAAA;AAAA,IACV,OAAO,KAAA,KAAoE;AACzE,MAAA,MAAM,MAAM,QAAA,EAAU;AAAA,QACpB,MAAA,EAAQ,MAAA;AAAA,QACR,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA,EAAmB;AAAA,QAC9C,WAAA,EAAa,SAAA;AAAA,QACb,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,KAAK;AAAA,OAC3B,CAAA;AACD,MAAA,MAAM,OAAA,EAAQ;AAAA,IAChB,CAAA;AAAA,IACA,CAAC,UAAU,OAAO;AAAA,GACpB;AAEA,EAAA,MAAM,MAAA,GAAS,WAAA;AAAA,IACb,OAAO,EAAA,KAAe;AACpB,MAAA,MAAM,MAAM,QAAA,EAAU;AAAA,QACpB,MAAA,EAAQ,QAAA;AAAA,QACR,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA,EAAmB;AAAA,QAC9C,WAAA,EAAa,SAAA;AAAA,QACb,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,EAAE,IAAI;AAAA,OAC5B,CAAA;AACD,MAAA,MAAM,OAAA,EAAQ;AAAA,IAChB,CAAA;AAAA,IACA,CAAC,UAAU,OAAO;AAAA,GACpB;AAEA,EAAA,OAAO,EAAE,WAAA,EAAa,OAAA,EAAS,GAAA,EAAK,MAAA,EAAO;AAC7C","file":"useSceneBackgrounds.mjs","sourcesContent":["import { useCallback, useEffect, useState } from 'react';\nimport type { SceneBackground } from '../types/wall';\n\nexport interface UseSceneBackgroundsOptions {\n  /** Endpoint that returns `{ backgrounds: SceneBackground[] }` and accepts POST/DELETE. Defaults to '/api/wall-scene-backgrounds'. */\n  endpoint?: string;\n  /** Skip the initial fetch (e.g. wait until isAdmin resolves). Default false. */\n  skip?: boolean;\n}\n\nexport interface UseSceneBackgroundsResult {\n  backgrounds: SceneBackground[];\n  refresh: () => Promise<void>;\n  add: (input: { name: string; image_url: string; description: string }) => Promise<void>;\n  remove: (id: string) => Promise<void>;\n}\n\n/**\n * Admin scene-background CRUD. Currently only used by 3 of the 9 walls;\n * lifting it makes the feature trivial to enable on the others.\n */\nexport function useSceneBackgrounds(opts?: UseSceneBackgroundsOptions): UseSceneBackgroundsResult {\n  const endpoint = opts?.endpoint ?? '/api/wall-scene-backgrounds';\n  const skip = opts?.skip ?? false;\n  const [backgrounds, setBackgrounds] = useState<SceneBackground[]>([]);\n\n  const refresh = useCallback(async () => {\n    try {\n      const res = await fetch(endpoint, { cache: 'no-store' });\n      const data: { backgrounds?: SceneBackground[] } = await res.json();\n      setBackgrounds(data.backgrounds ?? []);\n    } catch {\n      /* silent */\n    }\n  }, [endpoint]);\n\n  useEffect(() => {\n    if (skip) return;\n    refresh();\n  }, [skip, refresh]);\n\n  const add = useCallback(\n    async (input: { name: string; image_url: string; description: string }) => {\n      await fetch(endpoint, {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json' },\n        credentials: 'include',\n        body: JSON.stringify(input),\n      });\n      await refresh();\n    },\n    [endpoint, refresh],\n  );\n\n  const remove = useCallback(\n    async (id: string) => {\n      await fetch(endpoint, {\n        method: 'DELETE',\n        headers: { 'Content-Type': 'application/json' },\n        credentials: 'include',\n        body: JSON.stringify({ id }),\n      });\n      await refresh();\n    },\n    [endpoint, refresh],\n  );\n\n  return { backgrounds, refresh, add, remove };\n}\n"]}