import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; import { adminFetch } from './admin-api'; export interface Environment { id: string; slug: string; displayName: string; production: boolean; enabled: boolean; defaultContainerConfig: Record; jarRetentionCount: number | null; createdAt: string; } export interface CreateEnvironmentRequest { slug: string; displayName: string; production: boolean; } export interface UpdateEnvironmentRequest { displayName: string; production: boolean; enabled: boolean; } export function useEnvironments() { return useQuery({ queryKey: ['admin', 'environments'], queryFn: () => adminFetch('/environments'), }); } export function useCreateEnvironment() { const qc = useQueryClient(); return useMutation({ mutationFn: (req: CreateEnvironmentRequest) => adminFetch('/environments', { method: 'POST', body: JSON.stringify(req), }), onSuccess: () => qc.invalidateQueries({ queryKey: ['admin', 'environments'] }), }); } export function useUpdateEnvironment() { const qc = useQueryClient(); return useMutation({ mutationFn: ({ id, ...req }: UpdateEnvironmentRequest & { id: string }) => adminFetch(`/environments/${id}`, { method: 'PUT', body: JSON.stringify(req), }), onSuccess: () => qc.invalidateQueries({ queryKey: ['admin', 'environments'] }), }); } export function useUpdateDefaultContainerConfig() { const qc = useQueryClient(); return useMutation({ mutationFn: ({ id, config }: { id: string; config: Record }) => adminFetch(`/environments/${id}/default-container-config`, { method: 'PUT', body: JSON.stringify(config), }), onSuccess: () => qc.invalidateQueries({ queryKey: ['admin', 'environments'] }), }); } export function useUpdateJarRetention() { const qc = useQueryClient(); return useMutation({ mutationFn: ({ id, jarRetentionCount }: { id: string; jarRetentionCount: number | null }) => adminFetch(`/environments/${id}/jar-retention`, { method: 'PUT', body: JSON.stringify({ jarRetentionCount }), }), onSuccess: () => qc.invalidateQueries({ queryKey: ['admin', 'environments'] }), }); } export function useDeleteEnvironment() { const qc = useQueryClient(); return useMutation({ mutationFn: (id: string) => adminFetch(`/environments/${id}`, { method: 'DELETE' }), onSuccess: () => qc.invalidateQueries({ queryKey: ['admin', 'environments'] }), }); }