import { api } from "./client"; import type { AdminBounty, AdminPaymentEvent, AdminUser, AdminProduct, AdminComparisonTag, AdminComparisonTagItem, PaginatedResponse } from "../types"; export const adminApi = { listUsers: () => api.get>("/admin/users/").then((r) => r.data), updateUser: (id: number, data: { role?: string, is_active?: boolean }) => api.patch(`/admin/users/${id}`, data).then((r) => r.data), listCategories: () => api.get>("/admin/categories/").then((r) => r.data), listWebsites: () => api.get>("/admin/websites/").then((r) => r.data), listProducts: () => api.get>("/admin/products/").then((r) => r.data), listBounties: (status?: string) => api.get>("/admin/bounties/", { params: { status } }).then((r) => r.data), listDisputes: (status?: string) => api.get>( "/admin/disputes/", { params: { status } } ).then((r) => r.data), listPayments: () => api.get>("/admin/payments/").then((r) => r.data), // Product review APIs listPendingProducts: () => api.get>("/admin/products/pending/").then((r) => r.data), listAllProducts: (status?: string) => api.get>("/admin/products/all/", { params: { status } }).then((r) => r.data), reviewProduct: (productId: number, data: { approved: boolean, reject_reason?: string }) => api.post(`/admin/products/${productId}/review/`, data).then((r) => r.data), updateProductImages: (productId: number, data: { images: string[]; image?: string }) => api.put(`/admin/products/${productId}/images/`, data).then((r) => r.data), // Comparison tags listComparisonTags: () => api.get("/admin/compare-tags/").then((r) => r.data), createComparisonTag: (data: { name: string; slug: string; description?: string; cover_image?: string; icon?: string; sort_order?: number; is_active?: boolean }) => api.post("/admin/compare-tags/", data).then((r) => r.data), updateComparisonTag: (tagId: number, data: { name?: string; slug?: string; description?: string; cover_image?: string; icon?: string; sort_order?: number; is_active?: boolean }) => api.patch(`/admin/compare-tags/${tagId}`, data).then((r) => r.data), deleteComparisonTag: (tagId: number) => api.delete<{ message: string }>(`/admin/compare-tags/${tagId}`).then((r) => r.data), listComparisonTagItems: (tagId: number) => api.get(`/admin/compare-tags/${tagId}/items/`).then((r) => r.data), addComparisonTagItems: (tagId: number, data: { product_ids: number[]; sort_order?: number; is_pinned?: boolean }) => api.post(`/admin/compare-tags/${tagId}/items/`, data).then((r) => r.data), updateComparisonTagItem: (tagId: number, itemId: number, data: { sort_order?: number; is_pinned?: boolean }) => api.patch(`/admin/compare-tags/${tagId}/items/${itemId}`, data).then((r) => r.data), deleteComparisonTagItem: (tagId: number, itemId: number) => api.delete<{ message: string }>(`/admin/compare-tags/${tagId}/items/${itemId}`).then((r) => r.data), // Price history backfill backfillPriceHistory: (productIds?: number[]) => api.post<{ created: number; skipped: number }>("/admin/price-history/backfill/", { product_ids: productIds }).then((r) => r.data), backfillTagPriceHistory: (tagId: number) => api.post<{ created: number; skipped: number }>(`/admin/compare-tags/${tagId}/backfill-history/`).then((r) => r.data), recordPriceHistory: (data?: { product_ids?: number[]; force?: boolean }) => api.post<{ created: number; skipped: number }>("/admin/price-history/record/", data || {}).then((r) => r.data), recordTagPriceHistory: (tagId: number, data?: { product_ids?: number[]; force?: boolean }) => api.post<{ created: number; skipped: number }>(`/admin/compare-tags/${tagId}/record-history/`, data || {}).then((r) => r.data), };