# FleetModus — instalação, licença e atualizações

Cada instalação é um **Cliente**, licenciado pelo **GlobalHub**. Dentro da instalação o Cliente cria uma ou mais **empresas**, cada uma com a sua frota. Os limites (empresas, veículos, condutores, utilizadores) e os módulos vêm da licença assinada e são partilhados por toda a instalação.

**Requisitos:** PHP 8.3 ou superior (testado para 8.5) com as extensões `pdo_mysql`, `mbstring`, `openssl`, `fileinfo`, `zip`, `gd`, `dom`, `xml`, `tokenizer`, `ctype` e `json`. Também MySQL 8 ou MariaDB 10.6+ e HTTPS (AutoSSL). Não é preciso Composer, Node nem Terminal.

## 1. Instalar (install.php)
1. No cPanel, em **MySQL® Databases**, crie uma base de dados vazia e um utilizador com todos os privilégios.
2. Envie `fleetmodus_vX.Y.Z.zip` para a sua conta e extraia-o **fora** de `public_html` (ex.: `/home/utilizador/fleetmodus`).
3. Aponte o domínio ou subdomínio para a pasta `fleetmodus/public` (**Domains** → Document Root).
   - Se o alojamento não deixar mudar a Document Root, extraia o zip para a pasta do domínio e renomeie `.htaccess.raiz` para `.htaccess`.
4. Abra o endereço no navegador. Abre o **assistente de instalação**, em português ou inglês, que:
   - confirma os requisitos;
   - pede a base de dados, o endereço, o idioma, a sua conta de super-administrador, a primeira empresa (opcional) e o email de envio (opcional);
   - cria o `.env` com a `APP_KEY` e a **chave da instalação** (GlobalHub), as tabelas e a sua conta.
5. No fim, carregue em **Apagar o install.php agora**. Mesmo que não o apague, o instalador não volta a funcionar.
6. **Cron** (cPanel → Cron Jobs), a cada 5 minutos:
   `php /home/utilizador/fleetmodus/artisan schedule:run >> /dev/null 2>&1`
   O cron envia os alertas às 07:30 e confirma a licença no GlobalHub todos os dias.
7. **Guarde uma cópia do `.env`**: a `APP_KEY` cifra os PIN e os números dos cartões frota, e a `GLOBALHUB_INSTALL_KEY` identifica esta instalação.

Alternativa com Terminal: `php artisan key:generate && php artisan fleet:install --email=...`

## 2. Licença (GlobalHub)
- O assistente mostra a **chave da instalação** e o **domínio**. Indique-os ao pedir a licença ou o teste gratuito.
- Em **Licença** (menu do super-administrador), cole a chave recebida por email (com as marcas `INÍCIO/FIM`) ou carregue o ficheiro `.lic`. A licença só é aceite se for desta instalação e deste domínio.
- Em cada pedido, a licença é validada sem rede, a partir da assinatura, do produto, da chave da instalação e do domínio. Uma vez por dia é confirmada online e guarda-se sempre a versão devolvida (renovada, com mudança de plano ou bloqueada).
- Sem ligação ao GlobalHub a plataforma continua a funcionar; ao fim de 14 dias sem confirmação mostra um aviso, mas **nunca bloqueia por falta de rede**.
- **Só leitura** (os dados nunca se apagam; consultas e exportações continuam; o cron não importa nem envia alertas) quando a licença:
  - expirou e passaram os dias de tolerância;
  - está bloqueada ou foi substituída;
  - é de outra instalação ou de outro domínio;
- Nessa mesma página pode **renovar** a licença, **subir de plano** ou pedir a **mudança de servidor/domínio**. Os pedidos ficam pendentes até o operador do GlobalHub os aprovar, e a licença nova é instalada sozinha.

## 3. Atualizações
Em **Atualizações** (menu do super-administrador):
- **Pelo GlobalHub:** mostra as versões a que a licença dá direito. Ao descarregar uma, a plataforma confere o SHA-256, a assinatura e a data de atualizações (`updates_until`) e só depois a instala.
- **Manual:** carregue o `fleetmodus_vX.Y.Z.zip`. Se o ficheiro exceder o limite de upload do alojamento, envie-o pelo Gestor de ficheiros para `storage/app/updates/incoming/` e escolha-o na lista. Com ligação ao GlobalHub, a assinatura é confirmada pelo SHA-256; sem ligação, é pedida uma confirmação antes de instalar.
- A atualização é integral: as pastas da aplicação são trocadas por inteiro e os ficheiros obsoletos desaparecem. Nunca são substituídos `.env`, `storage/` (anexos e logs), `bootstrap/cache`, o `.htaccess` da raiz, nem a configuração PHP do alojamento (`.user.ini`, `php.ini`).
- Antes de instalar faz-se uma cópia dos ficheiros **e da base de dados**. As migrações correm sozinhas; se falharem, tudo é reposto automaticamente. As duas últimas cópias ficam guardadas e podem ser repostas no histórico (com ou sem a base de dados).
- Versões novas aparecem num aviso ao super-administrador com «Atualizar agora», «Adiar» e «Saltar». As de segurança não se podem esconder. Nada é atualizado sozinho.

## 4. Gerar uma versão (equipa FleetModus)
1. Atualize `version.php` (versão, `FLEETMODUS_RELEASED` e `FLEETMODUS_RELEASE_TYPE`) e a secção da versão em `CHANGELOG.md`.
2. Coloque em `config/globalhub-ligacao.json` o ficheiro de ligação (GlobalHub → Backoffice → Chaves).
3. Corra `tools/build-release.sh`. O resultado fica em `dist/fleetmodus_vX.Y.Z.zip`, com a pasta de topo `fleetmodus/` e o vendor incluído.
4. Publique o zip no GlobalHub, com o produto `fleetmodus` e o componente `fleetmodus`.
