import { create } from "zustand"; import type { AdCreativeDB, AdFilters, AdSortOptions } from "../types"; interface GalleryState { ads: AdCreativeDB[]; total: number; limit: number; offset: number; filters: AdFilters; sortOptions: AdSortOptions; selectedAds: string[]; isLoading: boolean; error: string | null; setAds: (ads: AdCreativeDB[], total: number) => void; setLimit: (limit: number) => void; setOffset: (offset: number) => void; setFilters: (filters: Partial) => void; setSortOptions: (sort: AdSortOptions) => void; toggleAdSelection: (adId: string) => void; clearSelection: () => void; selectAll: () => void; setIsLoading: (isLoading: boolean) => void; setError: (error: string | null) => void; removeAd: (adId: string) => void; } export const useGalleryStore = create((set, get) => ({ ads: [], total: 0, limit: 50, offset: 0, filters: {}, sortOptions: { field: "created_at", direction: "desc", }, selectedAds: [], isLoading: false, error: null, setAds: (ads, total) => set({ ads, total }), setLimit: (limit) => set({ limit, offset: 0 }), setOffset: (offset) => set({ offset }), setFilters: (filters) => set((state) => ({ filters: { ...state.filters, ...filters }, offset: 0, // Reset to first page when filters change selectedAds: [], // Clear selections when filters change })), setSortOptions: (sort) => set({ sortOptions: sort, offset: 0 }), // Reset to first page when sort changes toggleAdSelection: (adId) => set((state) => ({ selectedAds: state.selectedAds.includes(adId) ? state.selectedAds.filter((id) => id !== adId) : [...state.selectedAds, adId], })), clearSelection: () => set({ selectedAds: [] }), selectAll: () => set((state) => ({ selectedAds: state.ads.map((ad) => ad.id), })), setIsLoading: (isLoading) => set({ isLoading }), setError: (error) => set({ error }), removeAd: (adId) => set((state) => ({ ads: state.ads.filter((ad) => ad.id !== adId), total: state.total - 1, selectedAds: state.selectedAds.filter((id) => id !== adId), })), }));