# Plataforma SeedKey Manager

Sistema web pra gestao de geracao/consulta de seedkeys de tacografos.

## Stack
- PHP 7.4+ (PDO MySQL)
- MySQL 5.7+ / MariaDB 10.3+
- Bootstrap 5.3 (via CDN)
- Chart.js 4 (via CDN)
- Sem composer / sem framework — codigo direto

## Estrutura

```
plataforma/
├── config.php           # DB credenciais + constantes
├── schema.sql           # Estrutura + seed
├── lib/
│   ├── db.php           # PDO connection (singleton)
│   ├── auth.php         # Login, sessao, RBAC
│   ├── helpers.php      # Haversine, formatadores
│   └── seedkey.php      # Gerador placeholder (TROCAR pelo real)
├── includes/
│   ├── header.php       # HTML head + nav top
│   ├── sidebar.php      # Menu por role
│   └── footer.php       # JS + close tags
├── public/              # Aponte o DocumentRoot do Apache aqui
│   ├── index.php        # Redirect login/dashboard
│   ├── login.php
│   ├── logout.php
│   ├── api/
│   │   └── seedkey.php  # POST endpoint pro hardware
│   ├── master/          # role=master
│   ├── company/         # role=company (admin da company)
│   └── user/            # role=user (tecnico/oficina)
└── README.md
```

## Roles

| Role | Pode |
|---|---|
| `master` | Tudo. CRUD de companies, devices, users globais, ver alertas geograficos, bloquear devices, ver relatorios consolidados |
| `company` | Admin da propria empresa. CRUD users e devices da empresa, ver relatorios da empresa |
| `user` | Tecnico. Ve so o proprio historico de uso |

## Setup

```sql
CREATE DATABASE seedkey_platform CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'seedkey'@'localhost' IDENTIFIED BY 'senha_aqui';
GRANT ALL ON seedkey_platform.* TO 'seedkey'@'localhost';
FLUSH PRIVILEGES;
```

```bash
mysql -u seedkey -p seedkey_platform < schema.sql
```

Edite `config.php` com as credenciais do DB e a base URL.

### Apache (XAMPP/WAMP)
Aponte `DocumentRoot` para `plataforma/public` ou crie um VirtualHost:

```apache
<VirtualHost *:80>
    DocumentRoot "C:/Users/CONSERTAC/Desktop/atualizabvdr2/plataforma/public"
    ServerName seedkey.local
    <Directory "C:/Users/CONSERTAC/Desktop/atualizabvdr2/plataforma/public">
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>
```

### PHP built-in (teste rapido)
```bash
cd plataforma/public
php -S localhost:8080
```

## Usuarios seed (depois de rodar schema.sql)

| Email | Senha | Role |
|---|---|---|
| `master@seedkey.local` | `master123` | master |
| `admin@oficinaalpha.com.br` | `alpha123` | company |
| `tecnico@oficinaalpha.com.br` | `tecnico123` | user |
| `admin@oficinabeta.com.br` | `beta123` | company |

**Troque as senhas em producao.**

## API hardware

```bash
curl -X POST http://seedkey.local/api/seedkey.php \
  -H 'Content-Type: application/json' \
  -d '{
    "device_token": "TOKEN_DO_HARDWARE",
    "tachograph_serial": "45275260",
    "operation_type": "fw_update",
    "lat": -23.5505,
    "lng": -46.6333,
    "technician_email": "tecnico@oficinaalpha.com.br"
  }'
```

Resposta:
```json
{
  "ok": true,
  "seedkey": "87403eea3031b5cc53ca01835bd8289b",
  "log_id": 42
}
```

Endpoint:
- Valida `device_token` (cada device tem um)
- Verifica se device esta `active`
- Verifica se company esta `active`
- Calcula distancia (Haversine) do GPS pra oficina cadastrada
- Se `distance_km > company.max_distance_km` → flagga `location_alert=1` no log mas ainda entrega a key (a menos que `company.block_far_usage=1`)
- Incrementa contador de uso pra billing
- Loga tudo

## TODO real

- [ ] Trocar `lib/seedkey.php::generate_seedkey()` pelo algoritmo real (chamar a API Continental ou portar `compute_response` Python pra PHP)
- [ ] Adicionar HTTPS no Apache
- [ ] Rate-limit no endpoint API (atualmente sem)
- [ ] Job/cron pra bloqueio automatico apos N alertas geograficos
- [ ] Faturamento real (atualmente so conta uso, nao gera invoice)
