import { requestJson } from './apiClient'; function normalizeItems(items) { if (Array.isArray(items)) return items; if (items && typeof items === 'object') return [items]; return []; } export const TenantService = { async listTenants({ page, limit, id, user_id, name, code, status, expired_at_from, expired_at_to, created_at_from, created_at_to, sortField, sortOrder } = {}) { const iso = (d) => { if (!d) return undefined; const date = d instanceof Date ? d : new Date(d); if (Number.isNaN(date.getTime())) return undefined; return date.toISOString(); }; const query = { page, limit, id, user_id, name, code, status, expired_at_from: iso(expired_at_from), expired_at_to: iso(expired_at_to), created_at_from: iso(created_at_from), created_at_to: iso(created_at_to) }; if (sortField && sortOrder) { if (sortOrder === 1) query.asc = sortField; if (sortOrder === -1) query.desc = sortField; } const data = await requestJson('/super/v1/tenants', { query }); return { page: data?.page ?? page ?? 1, limit: data?.limit ?? limit ?? 10, total: data?.total ?? 0, items: normalizeItems(data?.items) }; }, async createTenant({ code, name, admin_user_id, duration } = {}) { return requestJson('/super/v1/tenants', { method: 'POST', body: { code, name, admin_user_id, duration } }); }, async listTenantUsers(tenantID, { page, limit, user_id, username, role, status } = {}) { return requestJson(`/super/v1/tenants/${tenantID}/users`, { query: { page, limit, user_id, username, role, status } }); }, async renewTenantExpire({ tenantID, duration }) { return requestJson(`/super/v1/tenants/${tenantID}`, { method: 'PATCH', body: { duration } }); }, async getTenantStatuses() { const data = await requestJson('/super/v1/tenants/statuses'); return Array.isArray(data) ? data : []; }, async updateTenantStatus({ tenantID, status }) { return requestJson(`/super/v1/tenants/${tenantID}/status`, { method: 'PATCH', body: { status } }); }, async getTenantDetail(tenantID) { if (!tenantID) throw new Error('tenantID is required'); return requestJson(`/super/v1/tenants/${tenantID}`); } };