# Plano de implementação: subdomínios no cadastro de instalação

## 1. Objetivo

Ao cadastrar uma instalação, configurar automaticamente os subdomínios:

| Subdomínio | Destino | Responsável |
|------------|---------|-------------|
| **api.{slug}.waygest.com.br** | Diretório da API no servidor (cPanel/Hostgator) | HostgatorService |
| **{slug}.waygest.com.br** | Projeto frontend na Vercel | VercelService |

Exemplo: para `slug = cliente1`:
- `api.cliente1.waygest.com.br` → servidor (cPanel), document root da API
- `cliente1.waygest.com.br` → Vercel (frontend)

---

## 2. Estado atual do código

- **InstalacaoService::criarInstalacao()** já orquestra:
  1. Criar instalação no BD
  2. Criar banco no Hostgator
  3. **Criar subdomínios no Hostgator** (API e Frontend)
  4. **Configurar Vercel** (somente se `metadados.vercel_enabled`)
  5. Criar `.env` da API
  6. Atualizar `.env` principal

- **HostgatorService** hoje:
  - `criarSubdominio($slug)` → cria **api.{slug}** com `docRoot = /public_html/api.{slug}.waygest.com.br`
  - `criarSubdominioFrontend($slug)` → cria **{slug}** com `docRoot = /public_html/{slug}.waygest.com.br`

- **Problema**: quando o frontend vai para a Vercel, o subdomínio **{slug}** não deve ser criado no cPanel, senão o DNS aponta para o servidor e não para a Vercel. Hoje os dois subdomínios são criados no Hostgator e o domínio também é adicionado na Vercel, o que gera conflito de destino.

---

## 3. Regras de negócio

1. **API (api.{slug}.waygest.com.br)**  
   - Sempre criada no cPanel.  
   - Document root deve apontar para o **diretório da API no servidor** (ex.: instalação única compartilhada ou pasta por instalação).  
   - Definir em config o **caminho base** (ex.: `GESTAO_API_DOCROOT` ou uso de alias por subdomínio).

2. **Frontend ({slug}.waygest.com.br)**  
   - Se **Vercel habilitada** para a instalação: **não** criar subdomínio no cPanel; apenas adicionar domínio no projeto Vercel.  
   - DNS de **{slug}.waygest.com.br** deve ser CNAME para o endereço indicado pela Vercel (ex.: `cname.vercel-dns.com` ou valor retornado pela API).  
   - Se **Vercel desabilitada** (caso legado): manter opção de criar subdomínio no cPanel para o frontend (comportamento atual).

---

## 4. Ajustes técnicos

### 4.1 Configuração (config/gestao.php e .env)

- Adicionar opção para o **document root da API** no servidor, por exemplo:
  - **Opção A – diretório por subdomínio**:  
    `api_path_template` = `public_html/api.{slug}.waygest.com.br` (cada subdomínio com sua pasta).
  - **Opção B – API única compartilhada**:  
    `api_docroot` = caminho fixo (ex.: `/home/waygest/waygest-api/public`) e o vhost/apache do **api.{slug}** usa esse path (com possível detecção da instalação por host).

Sugestão de variáveis em `config/gestao.php`:

```php
// Caminho da API no servidor (cPanel)
'api_docroot_template' => env('GESTAO_API_DOCROOT_TEMPLATE', '/public_html/api.{slug}.waygest.com.br'),
// ou para API única:
// 'api_docroot' => env('GESTAO_API_DOCROOT', '/home/waygest/waygest-api/public'),
```

- Manter/garantir em `config/gestao.php`:  
  `domain_base`, `hostgator.*`, `vercel.*` (já existentes).

### 4.2 HostgatorService

- **api.{slug}.waygest.com.br**  
  - Usar o document root definido em config (template com `{slug}` ou path fixo).  
  - Garantir que `criarSubdominio()` use esse valor em `dir` na chamada à API do cPanel (`SubDomain/addsubdomain`).

- **{slug}.waygest.com.br (frontend)**  
  - **Só** chamar `criarSubdominioFrontend()` quando a instalação **não** usar Vercel (ex.: flag `vercel_enabled` ou equivalente).  
  - Quando usar Vercel: **não** criar esse subdomínio no cPanel (evitar que o domínio aponte para o servidor).

- **Novos métodos (opcional)**  
  - `subdominioApiExiste($slug)`, `subdominioFrontendExiste($slug)` se for necessário diferenciar checagens (hoje já existe `subdominioExiste($slug, $isFrontend)`).

### 4.3 InstalacaoService

- Ordem recomendada ao criar instalação:
  1. Criar instalação no BD.
  2. Criar banco no Hostgator.
  3. **Sempre** criar subdomínio **API** no Hostgator (api.{slug}.waygest.com.br → diretório no servidor).
  4. **Condicional**:  
     - Se **Vercel habilitada**: **não** criar subdomínio frontend no Hostgator; chamar **configurarVercel()** (adicionar **{slug}.waygest.com.br** ao projeto).  
     - Se **Vercel desabilitada**: criar subdomínio frontend no Hostgator (comportamento atual).
  5. Criar `.env` da API e atualizar `.env` principal.

- Garantir que em `gerarConteudoEnv()` e em qualquer URL gerada:
  - **API**: `https://api.{slug}.waygest.com.br`
  - **Frontend**: `https://{slug}.waygest.com.br`  
  (usar `config('gestao.domain_base')` e o slug da instalação).

### 4.4 VercelService

- Manter `adicionarDominio('{slug}.waygest.com.br')` como está.
- Após adicionar o domínio, a API Vercel retorna as instruções de DNS (CNAME). Opcional: persistir em `instalacao.metadados.vercel.dns_instructions` ou exibir na tela de detalhe da instalação para o operador configurar o DNS (se não houver integração automática com o provedor de DNS).

### 4.5 DNS (waygest.com.br)

- **api.{slug}.waygest.com.br**: ao criar o subdomínio no cPanel, o próprio cPanel/Hostgator normalmente cria o registro A (ou CNAME) apontando para o servidor. Validar que o domínio base waygest.com.br está no cPanel e que subdomínios criados por lá já resolvem.
- **{slug}.waygest.com.br** (Vercel): é necessário um registro **CNAME** para cada `{slug}` (ou wildcard `*.waygest.com.br` se a Vercel suportar) apontando para o endereço fornecido pela Vercel. Isso pode ser:
  - feito manualmente no painel do registrador/DNS (Hostgator, Cloudflare, etc.), ou
  - automatizado no futuro via API do provedor de DNS (fora do escopo mínimo deste plano).

---

## 5. Fluxo de cadastro (resumo)

```
[Formulário: nome, slug, cores, vercel_enabled, ...]
        ↓
InstalacaoController::store()
        ↓
InstalacaoService::criarInstalacao()
        ├── 1. Instalacao::create()
        ├── 2. criarBancoDadosHostgator()
        ├── 3. Criar subdomínio API no Hostgator (api.{slug} → docroot no servidor)
        ├── 4a. Se vercel_enabled: configurarVercel() (adicionar {slug}.waygest.com.br)
        ├── 4b. Se !vercel_enabled: criarSubdominioFrontend() no Hostgator
        ├── 5. criarArquivoEnv()
        └── 6. atualizarEnvPrincipal()
```

---

## 6. Exclusão / rollback

- Ao **deletar** uma instalação:
  - **API**: remover subdomínio **api.{slug}** no cPanel (implementar em HostgatorService se ainda não existir, e chamar em InstalacaoService ao deletar).
  - **Frontend**:  
    - Se estava na Vercel: remover domínio **{slug}.waygest.com.br** do projeto (VercelService já tem `removerDominio()`; garantir chamada no fluxo de exclusão).  
    - Se estava no cPanel: remover subdomínio **{slug}** no cPanel.
- Ordem sugerida: remover da Vercel/cPanel → depois banco/dados/arquivos da instalação.

---

## 7. Checklist de implementação

- [x] **Config**: adicionar `api_docroot_template` em `config/gestao.php` (variável `GESTAO_API_DOCROOT_TEMPLATE` no `.env`).
- [x] **HostgatorService**: usar document root configurável ao criar subdomínio API; métodos `removerSubdominioApi()` e `removerSubdominioFrontend()` via API cPanel.
- [x] **InstalacaoService**:
  - [x] Sempre criar apenas subdomínio API no Hostgator.
  - [x] Se `vercel_enabled`: pular criação do subdomínio frontend no Hostgator e chamar `configurarVercel()`.
  - [x] Se `!vercel_enabled`: chamar `criarSubdominioFrontend()` no Hostgator.
- [x] **InstalacaoService (deletar)**: ao deletar, remover domínio da Vercel quando aplicável; remover subdomínios API e (se existir) frontend no cPanel.
- [x] **HostgatorService**: implementada remoção de subdomínio (API e frontend) via API cPanel `SubDomain/delsubdomain`.
- [x] **UI**: na tela de criação, deixar claro que “Subdomínio Frontend (Vercel)” evita criação do subdomínio no servidor; na tela de detalhe, opcional exibir instruções de DNS da Vercel para **{slug}.waygest.com.br**.
- [ ] **Testes**: criar instalação com e sem Vercel; conferir que api.{slug} resolve para o servidor e {slug} (com Vercel) está no projeto Vercel.
- [ ] **Documentação**: atualizar README ou docs com o fluxo de subdomínios e requisitos de DNS (CNAME para Vercel).

---

## 8. Referência rápida de URLs

- **API**: `https://api.{slug_instalacao}.waygest.com.br` → diretório no servidor (cPanel).  
- **Frontend**: `https://{slug_instalacao}.waygest.com.br` → projeto na Vercel (quando `vercel_enabled`).

Exemplo: slug `cliente1`  
- API: `https://api.cliente1.waygest.com.br`  
- Frontend: `https://cliente1.waygest.com.br`
