import { apiFetch, type ApiSettings, type DeltaDeletedItem } from "@govoplan/core-webui"; export type RoleSummary = { id: string; slug: string; name: string; permissions: string[]; }; export type GroupSummary = { id: string; slug: string; name: string; description?: string | null; is_active: boolean; member_count: number; member_ids: string[]; roles: RoleSummary[]; }; export type UserAdminItem = { id: string; account_id: string; tenant_id: string; email: string; display_name?: string | null; is_active: boolean; groups: GroupSummary[]; roles: RoleSummary[]; }; type DeltaResponseFields = { deleted: DeltaDeletedItem[]; watermark?: string | null; has_more: boolean; full: boolean; }; export type UserListDeltaResponse = { users: UserAdminItem[] } & DeltaResponseFields; export type GroupListDeltaResponse = { groups: GroupSummary[] } & DeltaResponseFields; function deltaSuffix(options: { since?: string | null; limit?: number } = {}): string { const params = new URLSearchParams(); if (options.since) params.set("since", options.since); if (options.limit) params.set("limit", String(options.limit)); const suffix = params.toString(); return suffix ? `?${suffix}` : ""; } export function fetchUsersDelta(settings: ApiSettings, options: { since?: string | null; limit?: number } = {}): Promise { return apiFetch(settings, `/api/v1/admin/users/delta${deltaSuffix(options)}`); } export function fetchGroupsDelta(settings: ApiSettings, options: { since?: string | null; limit?: number } = {}): Promise { return apiFetch(settings, `/api/v1/admin/groups/delta${deltaSuffix(options)}`); }