import { apiClient } from '@/lib/api/client'; import { buildQuery, type PaginatedResult } from '@/lib/api/types'; import type { Fatura } from '@/lib/api/faturas'; export type TenantStatus = 'trial' | 'ativo' | 'inadimplente' | 'suspenso' | 'cancelado'; /** `trial` só é atribuído automaticamente na criação — nunca é um destino válido de transição manual. */ export type TenantStatusTransition = Exclude; interface TenantPlanoSummary { id: string; nome: string; valor_mensal: string; } /** Espelha o model `tenants`, versão de listagem (`plano` selecionado, sem `faturas`/`_count`). */ export interface TenantListItem { id: string; razao_social: string; nome_fantasia: string | null; documento: string | null; email_contato: string; telefone: string | null; logo_url: string | null; cor_primaria: string | null; plano_id: string; status: TenantStatus; dia_vencimento_mensalidade: number; trial_expira_em: string | null; criado_em: string; atualizado_em: string; plano: TenantPlanoSummary; } /** `GET /master/tenants/:id` — inclui as últimas 5 faturas e contagem de uso. */ export interface TenantDetail extends Omit { plano: TenantPlanoSummary & { limite_customers: number | null; limite_usuarios: number | null }; faturas: Fatura[]; _count: { usuarios: number; customers: number; vendas: number }; } export interface TenantAdminCreated { id: string; nome: string; email: string; senha_provisoria: string; } export interface CreateTenantResult { tenant: TenantListItem; admin: TenantAdminCreated; } /** Espelha `CreateTenantDto` (`src/modules/tenants/dto/create-tenant.dto.ts`). */ export interface CreateTenantInput { razao_social: string; nome_fantasia?: string; documento?: string; email_contato: string; telefone?: string; plano_id: string; dia_vencimento_mensalidade?: number; admin: { nome: string; email: string; senha?: string; }; } /** Espelha `UpdateTenantDto` — mesmos campos cadastrais, sem `admin`/`status`. */ export type UpdateTenantInput = Partial>; export interface ListTenantsParams { status?: TenantStatus; busca?: string; page?: number; limit?: number; } export function listTenants(params: ListTenantsParams) { return apiClient.get>(`/master/tenants${buildQuery(params)}`); } export function getTenant(id: string) { return apiClient.get(`/master/tenants/${id}`); } export function createTenant(input: CreateTenantInput) { return apiClient.post('/master/tenants', input); } export function updateTenant(id: string, input: UpdateTenantInput) { return apiClient.put(`/master/tenants/${id}`, input); } export function updateTenantStatus(id: string, status: TenantStatusTransition) { return apiClient.patch(`/master/tenants/${id}/status`, { status }); }