# SupportConfigs — Suporte Técnico

## 1. O que é o módulo

Painel administrativo restrito ao e-mail de suporte da Máxima Tecnologia para gerenciamento técnico do CMS. Agrupa 4 abas: (1) Módulos/Feature Flags, (2) Sistema & Manutenção (modo de manutenção, debug, debugbar), (3) Suporte de Usuários (busca, detalhes, reset de senha), (4) Visualizador de Logs (tail e limpeza de arquivos de log). Também injeta as configurações de tema do portal (`$portalTheme`) e do CMS (`$cmsThemeCss`) globalmente via ViewComposers.

**Namespace:** `V2\Modules\Support\SupportConfigs`

## 2. Estrutura de dados

Não possui modelos Eloquent próprios. Opera sobre tabelas key/value do sistema V2:

- `v2_system_mail_configs` — configs de e-mail (profile, driver, host, port, encryption, username, password criptografada, from)
- `v2_module_flags` — feature flags dos módulos (module_key, module_title, active, module_group)
- `v2_system_controls` — controles de sistema (control_key, control_value, control_title)
- `v2_cms_theme_configs` — personalização white-label do CMS (config_key, config_value, config_title)
- `v2_portal_configs` — configurações do portal (TEMA, METADADOS, SEO)

## 3. Dependências

- **ActivityLoggerService** (`V2\Services\ActivityLogger\ActivityLoggerService`) — auditoria
- **UploadService** (`V2\Core\Services\UploadService`) — upload de assets de branding
- **StorageService** (`V2\Services\Storage\StorageService`) — upload de favicon
- **Sentinel** (`Cartalyst\Sentinel`) — autenticação e gerenciamento de usuários
- **Spatie Activitylog** — logs de auditoria

## 4. Tabelas

- `v2_system_mail_configs` (migração 2026_06_30_000001)
- `v2_module_flags` (migração 2026_06_30_000002)
- `v2_system_controls` (migração 2026_06_30_000003)
- `v2_cms_theme_configs` (migração 2026_06_30_000004)
- `v2_portal_configs` (migração 2026_06_30_000005)
- (migração 2026_07_02_000001: add foreign keys — users.v2_role_id, certificados)
- (migração 2026_07_06_000001: encrypt mail config passwords — migração de dados)

## 5. Arquivos

```
V2/Modules/Support/SupportConfigs/
├── Controllers/
│   ├── README.md
│   └── SupportConfigsCmsController.php   # index, clearCache, toggleModule, updateModulesBatch, saveSystemControls, searchUsers, getUserDetail, forcePasswordReset, getLogTail, clearLogFile
├── Migrations/
│   ├── 2026_06_30_000001_create_v2_system_mail_configs_table.php
│   ├── 2026_06_30_000002_create_v2_module_flags_table.php
│   ├── 2026_06_30_000003_create_v2_system_controls_table.php
│   ├── 2026_06_30_000004_create_v2_cms_theme_configs_table.php
│   ├── 2026_06_30_000005_create_v2_portal_configs_table.php
│   ├── 2026_07_02_000001_add_v2_foreign_keys.php
│   └── 2026_07_06_000001_encrypt_mail_config_passwords.php
├── ModuleProvider.php                     # Config: 1 submódulo; injeta portalTheme + portalConfigs nas views do portal e CmsThemeComposer nas views do CMS
├── README.md
├── Routes/
│   └── cms.php                            # prefix: cms/infra/support-configs; também cms/infra/user-configs (reset tema CMS)
├── Services/
│   ├── PortalConfigsService.php           # Fachada para CRUD de v2_portal_configs (TEMA, SEO, METADADOS)
│   ├── README.md
│   ├── SupportConfigsService.php          # Fachada/orquestrador — delega para SystemDiagnostics, SystemMaintenance, UserManagement
│   ├── SystemDiagnosticsService.php       # Diagnóstico (PHP, Laravel, ambiente, cache, fila, BD), tail de logs, limpeza de logs
│   ├── SystemMaintenanceService.php       # Cache, feature flags, tema CMS (white-label), favicon upload, system controls (maintenance, debug)
│   └── UserManagementService.php          # Busca, detalhes, reset de senha de usuários via Sentinel
├── ViewComposers/
│   └── CmsThemeComposer.php               # Injeta $cmsThemeCss (variáveis CSS) + $cmsThemeConfigs em v2-cms::*
└── Views/
    └── cms/
        └── supportConfigs/
            ├── index.blade.php            # Layout principal com navegação por abas + diagnóstico
            └── tabs/
                ├── logs.blade.php         # ABA 4: Visualizador de Logs
                ├── manutencao.blade.php   # ABA 2: Sistema & Manutenção
                ├── modulos.blade.php      # ABA 1: Feature Flags
                └── suporte.blade.php      # ABA 3: Suporte de Usuários
```

## 6. Observações/Sugestão

- O módulo mistura responsabilidades muito distintas (diagnóstico, feature flags, suporte a usuários, logs) em um único controller e service fachada. Seria mais coeso separar em submódulos, cada um com seu próprio controller.
- `UserManagementService` usa `Sentinel::getUserRepository()->where(...)` com `ILIKE` (PostgreSQL). Se o sistema migrar para outro banco, a query quebra.
- O sistema de feature flags (`v2_module_flags`) é simples e eficaz, mas poderia ser estendido com versionamento de flags e agendamento de ativação/desativação.
- `SystemDiagnosticsService::tailFile()` executa `shell_exec('which tail 2>/dev/null')` e depois `shell_exec(escapeshellcmd($tail) ...)`. Depender de comandos UNIX pode falhar em ambientes containerizados mais restritivos (ex: Alpine sem `tail`). O fallback PHP existe, mas é menos eficiente.
- A migração de FK (2026_07_02_000001) está neste módulo mas adiciona constraints em tabelas de outros módulos (certificado digital, roles) — quebra de separação de responsabilidades.
