# Configuração de APIs para Busca de Produtos por Código de Barras

Este documento descreve como configurar as variáveis de ambiente necessárias para as diferentes APIs de busca de produtos.

## Fontes de Dados Disponíveis

O sistema busca produtos em 5 fontes diferentes, em ordem de prioridade:

1. **GS1 Brasil** (Prioridade 1 - requer credenciais)
2. **Bluesoft Cosmo** (Prioridade 2 - requer credenciais)
3. **Product-Search.net** (Prioridade 3 - pode requerer credenciais)
4. **Busca Unificada** (Prioridade 4 - **GRATUITA, sem credenciais**)
5. **Open Food Facts** (Prioridade 5 - **GRATUITA, sem credenciais**)

## Configuração das APIs

### 1. GS1 Brasil (API Verified by GS1)

A GS1 Brasil oferece a API "Verified by GS1" para consulta de produtos cadastrados.

#### Passos para obter credenciais:

1. Acesse o portal: https://apicnp.gs1br.org
2. Faça login ou crie uma conta
3. No menu "Apps", cadastre uma nova aplicação
4. Obtenha o `Client_ID` e `Client_Secret`

#### Configuração no Convex:

```bash
# Client ID da aplicação registrada
npx convex env set GS1_BRASIL_CLIENT_ID "seu-client-id-aqui"

# Client Secret da aplicação
npx convex env set GS1_BRASIL_CLIENT_SECRET "seu-client-secret-aqui"

# URL do token (opcional, padrão já configurado)
npx convex env set GS1_BRASIL_TOKEN_URL "https://apicnp.gs1br.org/oauth/token"

# URL da API (opcional, padrão já configurado)
npx convex env set GS1_BRASIL_API_URL "https://apicnp.gs1br.org/api/v1/products"
```

#### Documentação:
- Manual: https://www.gs1br.org/educacao-e-eventos/Documents/Manual%20do%20Usu%C3%A1rio%20-%20API%20Verified%20by%20GS1_v.03.pdf
- Portal: https://apicnp.gs1br.org

---

### 2. Bluesoft Cosmos

A Bluesoft oferece uma API REST para consulta de produtos por código de barras (GTIN/EAN).

#### Passos para obter credenciais:

1. Acesse: https://api.cosmos.bluesoft.com.br/api
2. Faça login na plataforma
3. Obtenha seu token de API (X-Cosmos-Token) e User-Agent
4. Ambos estarão disponíveis na página após fazer login

#### Configuração no Convex:

```bash
# Token de autenticação da Bluesoft (X-Cosmos-Token)
npx convex env set BLUESOFT_API_KEY "seu-token-aqui"

# URL da API (opcional, padrão já configurado)
npx convex env set BLUESOFT_API_URL "https://api.cosmos.bluesoft.com.br"
```

**Importante**: O sistema usa automaticamente o endpoint correto `/gtins/{codigo}.json` conforme a documentação oficial.

#### Endpoint:
- **GET** `/gtins/{código}.json` - Recupera detalhes do produto através do GTIN/EAN informado

#### Estrutura de Resposta:
A API retorna informações incluindo:
- `description`: Nome/descrição do produto
- `brand.name`: Nome da marca
- `gpc.description`: Categoria do produto
- `ncm.code` e `ncm.description`: Código NCM e descrição
- `thumbnail`: URL da imagem do produto
- `price`: Preço formatado
- `gross_weight` e `net_weight`: Peso bruto e líquido

#### Documentação:
- **Documentação Oficial**: https://api.cosmos.bluesoft.com.br/api
- Central de Ajuda: https://ajuda.bluesoft.com.br/
- Suporte: suporte.api@bluesoft.com.br

---

### 3. Product-Search.net

Plataforma que fornece informações sobre produtos com base em códigos de barras.

#### Passos para obter credenciais (opcional):

1. Acesse: https://product-search.net
2. Crie uma conta (se necessário)
3. Obtenha sua API key (se disponível no seu plano)

#### Configuração no Convex:

```bash
# API Key (opcional - pode funcionar sem autenticação dependendo do plano)
npx convex env set PRODUCT_SEARCH_API_KEY "sua-api-key-aqui"

# URL da API (opcional, padrão já configurado)
npx convex env set PRODUCT_SEARCH_API_URL "https://api.product-search.net/v1/products"
```

#### Documentação:
- Site: https://product-search.net

---

### 4. Busca Unificada

API gratuita e pública para busca de produtos por código de barras. **Não requer configuração ou credenciais.**

#### Características:

- ✅ Totalmente gratuita para uso pessoal e comercial
- ✅ Sem necessidade de cadastro ou credenciais
- ✅ Sempre disponível
- ✅ Foco em produtos brasileiros

#### Documentação:
- Site: https://api-produtos.seunegocionanuvem.com.br

---

### 5. Open Food Facts

API gratuita e pública, não requer configuração. Sempre disponível como fallback.

#### Características:

- ✅ Totalmente gratuita e colaborativa
- ✅ Sem necessidade de cadastro ou credenciais
- ✅ Foco em produtos alimentícios
- ✅ Base de dados colaborativa internacional

---

## Ordem de Prioridade

O sistema tenta buscar em todas as fontes em paralelo e retorna o primeiro resultado válido encontrado, seguindo esta ordem de prioridade:

1. **GS1 Brasil** (requer credenciais)
2. **Bluesoft Cosmo** (requer credenciais)
3. **Product-Search.net** (pode requerer credenciais)
4. **Busca Unificada** (gratuita, sem credenciais) ⭐
5. **Open Food Facts** (gratuita, sem credenciais) ⭐

> ⭐ **Nota**: As APIs gratuitas (Busca Unificada e Open Food Facts) funcionam sem nenhuma configuração adicional e estão sempre disponíveis.

## Verificação da Configuração

Para verificar se as variáveis de ambiente estão configuradas:

```bash
npx convex env list
```

## Notas Importantes

1. **Limites de Uso**: Cada API pode ter limites de requisições por período. Consulte a documentação de cada serviço.

2. **Custos**: Algumas APIs podem ter custos associados. Verifique os planos disponíveis.

3. **Segurança**: As credenciais são armazenadas de forma segura nas variáveis de ambiente do Convex e nunca são expostas ao frontend.

4. **Fallback**: Se uma API falhar ou não estiver configurada, o sistema automaticamente tenta as outras fontes. As APIs gratuitas (Busca Unificada e Open Food Facts) sempre estarão disponíveis mesmo sem configuração.

5. **Timeout**: Todas as requisições têm timeout de 5 segundos para evitar travamentos.

## Testando a Configuração

Após configurar as variáveis de ambiente, teste a busca com um código de barras conhecido:

1. Acesse a página de cadastro de materiais
2. Digite ou escaneie um código de barras
3. O sistema deve buscar em todas as fontes configuradas
4. O modal mostrará a fonte dos dados encontrados

## Suporte

Em caso de problemas:

1. Verifique se as credenciais estão corretas
2. Verifique se as URLs dos endpoints estão corretas
3. Consulte os logs do Convex para erros específicos
4. Verifique a documentação oficial de cada API

