"use client" import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query" import api from "@/lib/api" import type { AlbumResponse, CreateAlbumRequest, UpdateAlbumRequest, } from "@/lib/types" export function useAlbums() { const qc = useQueryClient() const query = useQuery({ queryKey: ["albums"], queryFn: async () => { const { data } = await api.get("/albums") return data }, }) const create = useMutation({ mutationFn: async (title: string) => { const body: CreateAlbumRequest = { title } const { data } = await api.post("/albums", body) return data }, onSuccess: () => qc.invalidateQueries({ queryKey: ["albums"] }), }) const update = useMutation({ mutationFn: async ({ id, ...updates }: UpdateAlbumRequest & { id: string }) => { const { data } = await api.put(`/albums/${id}`, updates) return data }, onSuccess: () => qc.invalidateQueries({ queryKey: ["albums"] }), }) const deleteAlbum = useMutation({ mutationFn: async (id: string) => { await api.delete(`/albums/${id}`) }, onSuccess: () => qc.invalidateQueries({ queryKey: ["albums"] }), }) const addEntry = useMutation({ mutationFn: async ({ albumId, assetId }: { albumId: string; assetId: string }) => { await api.post(`/albums/${albumId}/entries`, { asset_id: assetId }) }, onSuccess: () => { qc.invalidateQueries({ queryKey: ["albums"] }) qc.invalidateQueries({ queryKey: ["album"] }) }, }) const removeEntry = useMutation({ mutationFn: async ({ albumId, assetId }: { albumId: string; assetId: string }) => { await api.delete(`/albums/${albumId}/entries/${assetId}`) }, onSuccess: () => { qc.invalidateQueries({ queryKey: ["albums"] }) qc.invalidateQueries({ queryKey: ["album"] }) }, }) return { albums: query.data ?? [], isLoading: query.isLoading, createAlbum: create.mutateAsync, deleteAlbum: deleteAlbum.mutateAsync, updateAlbum: update.mutateAsync, addEntry: addEntry.mutateAsync, removeEntry: removeEntry.mutateAsync, } }