import { createBrowserSupabaseClient, type Inserts, type Updates, validateCnpj, formatCnpj } from '@licita-ia/shared-libs' export class EmpresaService { private static getSupabase() { return createBrowserSupabaseClient() } static async listar() { const { data, error } = await this.getSupabase() .from('empresas') .select('*') .eq('ativa', true) .order('razao_social') if (error) throw error return data } static async buscarPorId(id: string) { const { data, error } = await this.getSupabase() .from('empresas') .select('*') .eq('id', id) .single() if (error) throw error return data } static async buscarPorCnpj(cnpj: string) { const { data, error } = await this.getSupabase() .from('empresas') .select('*') .eq('cnpj', cnpj) .single() if (error && error.code !== 'PGRST116') throw error return data } static async criar(empresa: Inserts<'empresas'>) { // Verificar se CNPJ é válido if (!validateCnpj(empresa.cnpj)) { throw new Error('CNPJ inválido') } // Verificar se CNPJ já existe const empresaExistente = await this.buscarPorCnpj(empresa.cnpj) if (empresaExistente) { throw new Error('CNPJ já cadastrado no sistema') } const { data, error } = await this.getSupabase() .from('empresas') .insert([empresa]) .select() .single() if (error) throw error return data } static async atualizar(id: string, empresa: Updates<'empresas'>) { const { data, error } = await this.getSupabase() .from('empresas') .update({ ...empresa, updated_at: new Date().toISOString() }) .eq('id', id) .select() .single() if (error) throw error return data } static async desativar(id: string) { const { data, error } = await this.getSupabase() .from('empresas') .update({ ativa: false, updated_at: new Date().toISOString() }) .eq('id', id) .select() .single() if (error) throw error return data } // Métodos utilitários static validarCnpj = validateCnpj static formatarCnpj = formatCnpj }