import { apiClient } from '@/lib/api/client'; import { buildQuery, type PaginatedResult } from '@/lib/api/types'; /** Espelha o model `customers`. */ export interface Customer { id: string; razao_social: string; nome_fantasia: string | null; documento: string | null; email: string | null; telefone_whatsapp: string | null; endereco: string | null; cidade: string | null; uf: string | null; observacoes: string | null; ativo: boolean; criado_em: string; atualizado_em: string; } /** `GET /tenant/customers/:id` inclui os contatos. */ export interface CustomerDetail extends Customer { contatos: CustomerContact[]; } /** Espelha `CreateCustomerDto`/`UpdateCustomerDto` — `ativo` fica de fora de propósito (só via desativar). */ export interface CustomerInput { razao_social: string; nome_fantasia?: string; documento?: string; email?: string; telefone_whatsapp?: string; endereco?: string; cidade?: string; uf?: string; observacoes?: string; } export interface ListCustomersParams { busca?: string; ativo?: boolean; page?: number; limit?: number; } export function listCustomers(params: ListCustomersParams) { return apiClient.get>(`/tenant/customers${buildQuery(params)}`); } export function getCustomer(id: string) { return apiClient.get(`/tenant/customers/${id}`); } export function createCustomer(input: CustomerInput) { return apiClient.post('/tenant/customers', input); } export function updateCustomer(id: string, input: Partial) { return apiClient.put(`/tenant/customers/${id}`, input); } /** Soft delete (`ativo: false`). */ export function deactivateCustomer(id: string) { return apiClient.delete(`/tenant/customers/${id}`); } /** Espelha o model `customer_contacts`. */ export interface CustomerContact { id: string; customer_id: string; nome: string; cargo: string | null; email: string | null; telefone_whatsapp: string | null; principal: boolean; criado_em: string; } /** Espelha `CreateContactDto`/`UpdateContactDto`. */ export interface CustomerContactInput { nome: string; cargo?: string; email?: string; telefone_whatsapp?: string; principal?: boolean; } export function listCustomerContacts(customerId: string) { return apiClient.get(`/tenant/customers/${customerId}/contatos`); } export function createCustomerContact(customerId: string, input: CustomerContactInput) { return apiClient.post(`/tenant/customers/${customerId}/contatos`, input); } export function updateCustomerContact( customerId: string, contactId: string, input: Partial, ) { return apiClient.put(`/tenant/customers/${customerId}/contatos/${contactId}`, input); } /** Hard delete. */ export function deleteCustomerContact(customerId: string, contactId: string) { return apiClient.delete(`/tenant/customers/${customerId}/contatos/${contactId}`); }