# Mix Turbo — Firebase final

Esta pasta é a versão final preparada para substituir o backend Supabase por Firebase **sem alterar o visual e o fluxo principal do site**.

## O que foi reforçado nesta revisão

- `DEMO_MODE` final já vem como `false`.
- `config.js` aceita os valores completos do Firebase sem adicionar sufixos automaticamente.
- App Check com reCAPTCHA Enterprise foi preparado no código (opcional durante a configuração e recomendado antes do uso definitivo).
- Regras do Firestore foram endurecidas: o formulário público só consegue criar orçamentos pendentes com os campos esperados e tamanhos limitados.
- Aprovação de orçamento agora é atômica: cliente novo + serviço + aprovação são concluídos na mesma transação.
- Recusa também usa transação e impede que duas pessoas aprovem/recusem o mesmo orçamento simultaneamente.
- O painel não relê `clients`, `services` e `quotes` inteiros depois de cada cadastro/edição. Ele atualiza apenas o estado local, reduzindo muito as leituras do Firestore.
- Foi adicionado o botão `↻ Atualizar` no painel para buscar manualmente alterações feitas por outro operador.
- Recuperação de senha recebe a URL `/painel` como URL de continuação.
- O link de instruções do painel foi corrigido.

---

# 1. Crie o projeto Firebase

1. Acesse o Firebase Console.
2. Clique em **Adicionar projeto**.
3. Use um nome como `mix-turbo`.
4. Google Analytics é opcional para este sistema.

# 2. Ative Authentication

1. Abra **Build > Authentication**.
2. Clique em **Get started**.
3. Abra **Sign-in method**.
4. Ative **Email/Password**.
5. Salve.

Depois, em **Authentication > Settings > Authorized domains**, confirme que existem o domínio definitivo da Mix Turbo e, enquanto estiver testando, o domínio `.netlify.app` usado pelo projeto.

# 3. Crie o Firestore

1. Abra **Build > Firestore Database**.
2. Clique em **Create database**.
3. Escolha uma região adequada ao projeto.
4. Inicie em **Production mode**.

# 4. Publique as regras

1. Abra **Firestore Database > Rules / Regras**.
2. Abra o arquivo `firestore.rules` desta pasta.
3. Copie o conteúdo inteiro.
4. Substitua as regras atuais no Firebase.
5. Clique em **Publish / Publicar**.

Não use regras do tipo `allow read, write: if true`.

# 5. Registre o app Web e copie a configuração

1. Vá em **Project settings / Configurações do projeto**.
2. Em **Your apps / Seus apps**, crie um app Web (`</>`), se ainda não existir.
3. O Firebase mostrará um objeto parecido com:

```js
const firebaseConfig = {
  apiKey: "...",
  authDomain: "...",
  projectId: "...",
  storageBucket: "...",
  messagingSenderId: "...",
  appId: "..."
};
```

4. Abra `config.js`.
5. Cole **cada valor completo exatamente como aparece no Firebase**.

Exemplo correto:

```js
FIREBASE_CONFIG: {
  apiKey: "valor-completo",
  authDomain: "projeto.firebaseapp.com",
  projectId: "projeto",
  storageBucket: "valor-exato-mostrado-pelo-firebase",
  messagingSenderId: "123456789",
  appId: "1:123456789:web:abc123"
}
```

Não acrescente `.firebaseapp.com` nem `.appspot.com` manualmente.

Esta versão final já está com:

```js
DEMO_MODE: false
```

# 6. Crie o administrador

1. Vá em **Authentication > Users**.
2. Clique em **Add user**.
3. Crie o e-mail e senha do administrador.
4. Copie o **UID** desse usuário.
5. Vá em **Firestore Database > Data**.
6. Crie a coleção `profiles`.
7. O ID do documento deve ser exatamente o UID do Authentication.
8. Crie:

- `name` (string): nome do usuário
- `email` (string): e-mail do usuário
- `role` (string): `admin`

Para operador, use `role: operator`.

# 7. App Check — recomendado para produção

O formulário público precisa criar um orçamento sem login. As regras limitam o que pode ser gravado, mas o App Check adiciona proteção contra requisições automatizadas feitas fora do site legítimo.

Primeiro faça o site funcionar normalmente. Depois:

1. No Google Cloud Console, crie uma chave Web **score-based reCAPTCHA Enterprise** para os domínios do site.
2. No Firebase, abra **App Check**.
3. Registre o app Web usando **reCAPTCHA Enterprise** e a mesma Site Key.
4. Abra `config.js` e cole somente a **Site Key pública** em:

```js
APP_CHECK_SITE_KEY: "SUA_SITE_KEY"
```

5. Publique a versão atualizada.
6. No Firebase App Check, monitore as métricas para confirmar que os acessos legítimos chegam como válidos.
7. Só depois ative **Enforcement** para Cloud Firestore. Você também pode ativar para Authentication depois de validar login e recuperação de senha.

Não coloque chaves privadas, service accounts ou segredos no `config.js`.

# 8. Dados do Supabase

**Publicar o código Firebase não move automaticamente os registros antigos.**

Se o Supabase contém apenas dados de teste, você pode iniciar o Firestore vazio e recriar somente os usuários reais.

Se já existem clientes, serviços ou orçamentos reais no Supabase, leia `MIGRACAO-DADOS-SUPABASE.md` antes de trocar o backend definitivo.

Não apague o projeto Supabase até a migração e os testes finais terminarem.

# 9. Publique no mesmo projeto Netlify

1. Entre na Netlify.
2. Abra o projeto atual da Mix Turbo.
3. Faça um novo Production deploy usando **esta pasta inteira**.
4. Não crie outro site se o objetivo for manter o domínio e o projeto atuais.
5. Confirme que `/painel` continua abrindo normalmente.

# 10. Testes obrigatórios antes de abandonar o Supabase

Teste nesta ordem:

1. Site público no computador.
2. Site público no celular.
3. Solicitação de orçamento.
4. Verificar o documento criado em `quotes`.
5. Login do administrador.
6. Recuperação de senha.
7. Orçamento aparecendo no painel.
8. Aprovação `✓`.
9. Confirmar cliente em `clients`.
10. Confirmar venda em `services`.
11. Recusa `×` sem criar venda.
12. Cadastro e edição de cliente.
13. Cadastro e edição de serviço.
14. Lançamento em lote.
15. Relatório diário.
16. CSV.
17. Impressão/PDF.
18. Fechamento semanal.
19. Testar com outro aparelho.
20. Se houver mais de um operador, faça uma alteração em um aparelho e use `↻ Atualizar` no outro.
21. Depois de configurar App Check, repita orçamento, login e recuperação de senha.

# 11. Como o consumo de leituras foi reduzido

Ao entrar no painel, o histórico é carregado uma vez para preservar os relatórios e pesquisas atuais.

Depois disso, criar/editar/excluir um registro **não dispara uma nova leitura completa das três coleções**. O JavaScript atualiza apenas os dados alterados na memória.

O botão `↻ Atualizar` faz uma nova sincronização completa somente quando alguém realmente precisar ver alterações feitas por outro usuário.

Isso mantém o comportamento simples do painel e reduz bastante o risco de gastar leituras desnecessárias do plano gratuito.

---

## Arquivos principais

- `index.html` — site público
- `painel.html` — painel administrativo
- `config.js` — configuração pública do Firebase/App Check
- `script.js` — orçamento público
- `painel.js` — autenticação, gestão, relatórios e transações
- `firestore.rules` — regras de segurança
- `_redirects` — rota `/painel`
- `_headers` — cabeçalhos da Netlify
- `MIGRACAO-DADOS-SUPABASE.md` — orientação para dados antigos
- `CHECKLIST-TESTE-FINAL.md` — checklist de homologação
