import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; import { api } from './client'; import type { DashboardData, TenantLicenseData, TenantSettings, AuditLogPage, AuditLogFilters } from '../types/api'; export function useTenantDashboard() { return useQuery({ queryKey: ['tenant', 'dashboard'], queryFn: () => api.get('/tenant/dashboard'), refetchInterval: 30_000, }); } export function useTenantLicense() { return useQuery({ queryKey: ['tenant', 'license'], queryFn: () => api.get('/tenant/license'), }); } export function useTenantOidc() { return useQuery>({ queryKey: ['tenant', 'oidc'], queryFn: () => api.get('/tenant/oidc'), }); } export function useUpdateOidc() { const qc = useQueryClient(); return useMutation>({ mutationFn: (config) => api.post('/tenant/oidc', config), onSuccess: () => qc.invalidateQueries({ queryKey: ['tenant', 'oidc'] }), }); } export function useTenantTeam() { return useQuery>>({ queryKey: ['tenant', 'team'], queryFn: () => api.get('/tenant/team'), }); } export function useInviteTeamMember() { const qc = useQueryClient(); return useMutation<{ userId: string }, Error, { email: string; roleId: string }>({ mutationFn: (body) => api.post('/tenant/team/invite', body), onSuccess: () => qc.invalidateQueries({ queryKey: ['tenant', 'team'] }), }); } export function useRemoveTeamMember() { const qc = useQueryClient(); return useMutation({ mutationFn: (userId) => api.delete(`/tenant/team/${userId}`), onSuccess: () => qc.invalidateQueries({ queryKey: ['tenant', 'team'] }), }); } export function useTenantSettings() { return useQuery({ queryKey: ['tenant', 'settings'], queryFn: () => api.get('/tenant/settings'), }); } export function useTenantAuditLog(filters: Omit) { const params = new URLSearchParams(); if (filters.action) params.set('action', filters.action); if (filters.result) params.set('result', filters.result); if (filters.search) params.set('search', filters.search); if (filters.from) params.set('from', filters.from); if (filters.to) params.set('to', filters.to); params.set('page', String(filters.page ?? 0)); params.set('size', String(filters.size ?? 25)); return useQuery({ queryKey: ['tenant', 'audit', filters], queryFn: () => api.get(`/tenant/audit?${params.toString()}`), }); }