# Nexus - Ingline Systems

> **Status:** 🚧 Em Desenvolvimento 🚧

Sistema central (Nexus) para o monitoramento de PABX (FreePBX/Asterisk) e gestão de informações de clientes, desenvolvido para a equipe de suporte da Ingline Systems.

## 1. Sobre o Projeto

O **Nexus** é a ferramenta definitiva para a equipe de suporte da Ingline Systems. Ele foi criado para centralizar duas necessidades críticas em uma única aplicação Laravel:

1.  **Gestão de Clientes:** Manter um registro centralizado e confiável com todas as informações vitais dos clientes (Razão Social, CNPJ, contatos, detalhes técnicos, etc.).
2.  **Monitoramento Ativo:** Acompanhar o estado de saúde (status de endpoints, troncos, etc.) de todos os servidores FreePBX/Asterisk dos clientes em tempo real.

A arquitetura do projeto utiliza um modelo "push". Um script PHP leve, instalado no servidor FreePBX de cada cliente, coleta os dados de status via AMI (Asterisk Manager Interface) e os envia periodicamente para a API deste sistema.

O Nexus, então, processa, armazena e exibe essas informações em um dashboard unificado, permitindo que a equipe de suporte aja proativamente antes que um problema seja reportado.

## 2. Funcionalidades Planejadas

-   [ ] **Dashboard de Monitoramento:** Visualização em tempo real do status de todos os endpoints de todos os clientes.
-   [ ] **Cadastro Completo de Clientes:** CRUD para clientes, armazenando informações comerciais (CNPJ, Endereço) e técnicas (IP, Versão do FreePBX, etc.).
-   [ ] **API Segura:** Endpoint POST para recebimento dos dados (heartbeats) dos scripts dos clientes, protegido por autenticação baseada em token (Sanctum).
-   [ ] **Alertas:** Notificações (via Email, Slack, etc.) quando um cliente fica offline (para de enviar heartbeats) ou um endpoint específico falha.
-   [ ] **Histórico de Status:** Logs de mudanças de estado para permitir diagnósticos (ex: "Ramal 1020 do Cliente X ficou offline às 14:30").
-   [ ] **Gestão de Usuários:** Controle de acesso para a equipe de suporte.

## 3. Arquitetura e Stack

Este projeto é construído com a seguinte stack:

-   **Backend:** Laravel 12 (PHP 8.3+)
-   **Frontend:** Blade com (potencialmente) Livewire ou Vue.js para reatividade
-   **Banco de Dados:** MySQL (ou PostgreSQL)
-   **Filas (Jobs):** Redis (Recomendado) para processar os heartbeats de forma assíncrona
-   **Broadcasting (WebSockets):** Laravel Reverb para atualizações em tempo real no dashboard
-   **Autenticação da API:** Laravel Sanctum (para os tokens dos scripts clientes)

## 4. Primeiros Passos (Ambiente de Desenvolvimento)

Siga os passos abaixo para configurar o projeto localmente.

1.  **Clonar o repositório:**
    ```bash
    git clone [https://github.com/Lukibeg/nexus-inglinesystems.git](https://github.com/Lukibeg/nexus-inglinesystems.git)
    cd nexus-inglinesystems
    ```

2.  **Instalar dependências (PHP e JS):**
    ```bash
    composer install
    npm install
    npm run build
    ```

3.  **Configurar o Ambiente:**
    ```bash
    # Copie o arquivo de exemplo
    cp .env.example .env
    
    # Gere a chave da aplicação
    php artisan key:generate
    ```

4.  **Configurar o .env:**
    Abra o arquivo `.env` e configure as variáveis do banco de dados (`DB_DATABASE`, `DB_USERNAME`, `DB_PASSWORD`).

5.  **Rodar as Migrações:**
    ```bash
    php artisan migrate
    ```

6.  **(Opcional) Rodar Seeders para dados de teste:**
    ```bash
    php artisan db:seed
    ```

7.  **Iniciar o servidor de desenvolvimento:**
    ```bash
    php artisan serve
    ```

## 5. Script Cliente (Agente)

A pasta `/client-script` (ou um repositório separado) conterá o script PHP `monitor.php` que deve ser instalado em cada servidor FreePBX do cliente.

**Responsabilidades do script:**
1.  Conectar-se ao AMI (Asterisk Manager Interface).
2.  Obter o status dos endpoints (ex: `pjsip show endpoints`).
3.  Formatar os dados em um JSON.
4.  Enviar os dados via POST para a API do Nexus (`https://nexus.inglinesystems.com.br/api/v1/status-update`), incluindo o Token de Autenticação no cabeçalho.
5.  Ser executado via `crontab` a cada 1 ou 5 minutos.
