import { useEffect, useState } from 'react' // Multi-select over a photo list. Selection lives here (not in the gallery) // so it survives lightbox open/close, and is pruned automatically when // photos disappear from the list (deletes, polling refreshes). export default function useSelection(photos) { const [selected, setSelected] = useState(() => new Set()) useEffect(() => { setSelected((prev) => { if (prev.size === 0) return prev const valid = new Set(photos.map((p) => p.id)) const next = new Set([...prev].filter((id) => valid.has(id))) return next.size === prev.size ? prev : next }) }, [photos]) const toggle = (photoId) => setSelected((prev) => { const next = new Set(prev) if (next.has(photoId)) next.delete(photoId) else next.add(photoId) return next }) // Adds `list` (the caller's currently visible photos) to the selection — // additive, so selecting all of one filtered view keeps picks from another. const selectAll = (list) => setSelected((prev) => new Set([...prev, ...list.map((p) => p.id)])) const clear = () => setSelected(new Set()) const selectedBytes = photos.reduce((sum, p) => sum + (selected.has(p.id) ? p.size_bytes : 0), 0) const totalBytes = photos.reduce((sum, p) => sum + p.size_bytes, 0) return { selected, toggle, selectAll, clear, selectedBytes, totalBytes } }