# 🎯 Módulo de Rotas PraFrota

## 📋 Visão Geral

O módulo de rotas foi criado seguindo os padrões estabelecidos do PraFrota, implementando um sistema completo de gestão de rotas de transporte com funcionalidades de rastreamento, histórico e integração com componentes dinâmicos.

## 🏗️ Arquitetura

### Componentes Principais

#### 1. RoutesComponent
- **Localização**: `projects/idt_app/src/app/domain/routes/routes.component.ts`
- **Função**: Componente principal que estende `BaseDomainComponent<Route>`
- **Características**:
  - Implementa padrão de domínio unificado
  - Configuração completa de colunas e sub-abas
  - Integração com `TabSystemComponent`
  - Suporte a componentes dinâmicos

#### 2. RoutesService
- **Localização**: `projects/idt_app/src/app/domain/routes/routes.service.ts`
- **Função**: Serviço principal com sistema de fallback automático
- **Características**:
  - Implementa interface `DomainService<Route>`
  - Sistema de fallback para dados offline
  - Monitoramento de conectividade do backend
  - Cache inteligente de dados
  - Geração de dados mock realistas

#### 3. RouteLocationTrackerComponent
- **Localização**: `projects/idt_app/src/app/shared/components/route-location-tracker/`
- **Função**: Componente de rastreamento de localização de rotas
- **Características**:
  - Layout responsivo com grid de 4 colunas
  - Integração com Google Maps
  - Histórico de localizações
  - Geocodificação automática

## 📁 Estrutura de Arquivos

```
domain/routes/
├── routes.component.ts          # Componente principal
├── routes.component.html        # Template (TabSystemComponent)
├── routes.component.scss        # Estilos com badges de status
├── routes.service.ts            # Serviço com fallback
├── route.interface.ts           # Interface principal Route
└── README.md                    # Esta documentação

shared/components/route-location-tracker/
├── route-location-tracker.component.ts     # Componente de rastreamento
├── route-location-tracker.component.html   # Template responsivo
└── route-location-tracker.component.scss   # Estilos modernos
```

## 🎯 Funcionalidades Implementadas

### ✅ CRUD Completo
- **Create**: Criação de novas rotas
- **Read**: Listagem com paginação e filtros
- **Update**: Edição de rotas existentes
- **Delete**: Remoção de rotas

### ✅ Sistema de Sub-Abas
1. **Dados**: Formulário principal da rota
2. **Localização**: Componente de rastreamento dinâmico
3. **Paradas**: (Coming Soon)
4. **Custos**: (Coming Soon)
5. **Documentos**: (Coming Soon)
6. **Histórico**: (Coming Soon)

### ✅ Rastreamento de Localização
- Informações da rota (origem, destino, status)
- Mapa integrado do Google Maps
- Histórico de posições com timestamps
- Geocodificação automática de coordenadas
- Interface responsiva (4→2→1 colunas)

### ✅ Sistema de Fallback
- Detecção automática de conectividade
- Dados mock realistas quando offline
- Monitoramento contínuo do backend
- Reconexão automática

## 🔧 Configuração

### Rotas da Aplicação
O componente está registrado em `app.routes.ts`:

```typescript
{
  path: 'routes',
  loadComponent: () => import('./domain/routes/routes.component')
    .then(m => m.RoutesComponent)
}
```

### Componente Dinâmico
O `RouteLocationTrackerComponent` está registrado no `DynamicComponentResolverService`:

```typescript
['app-route-location-tracker', RouteLocationTrackerComponent]
```

### Interface Route
A interface principal suporta diferentes tipos de rotas:

```typescript
interface Route {
  routeId: string;
  routeNumber: string;
  type: 'firstMile' | 'lineHaul' | 'lastMile' | 'custom';
  status: 'pending' | 'inProgress' | 'completed' | 'delayed' | 'cancelled';
  origin: LocationData;
  destination: LocationData;
  currentLocation?: LocationData;
  // ... outros campos
}
```

## 🎨 Design System

### Badges de Status
- **Pendente**: Amarelo (`#fef3c7` / `#92400e`)
- **Em Andamento**: Azul (`#dbeafe` / `#1e40af`)
- **Concluída**: Verde (`#d1fae5` / `#065f46`)
- **Atrasada**: Vermelho (`#fed7d7` / `#c53030`)
- **Cancelada**: Cinza (`#f3f4f6` / `#374151`)

### Layout Responsivo
- **Desktop**: Grid 4 colunas
- **Tablet**: Grid 2 colunas
- **Mobile**: Grid 1 coluna

## 🚀 Como Usar

### 1. Acessar o Módulo
Navegue para `/routes` na aplicação.

### 2. Visualizar Rotas
A lista principal exibe todas as rotas com:
- Filtros por tipo, status, motorista, veículo
- Ordenação por colunas
- Paginação configurável

### 3. Editar Rota
Clique em "Editar" para abrir as sub-abas:
- **Dados**: Edite informações básicas
- **Localização**: Visualize rastreamento em tempo real

### 4. Rastreamento
Na aba "Localização":
- Veja informações da rota
- Acompanhe posição atual no mapa
- Consulte histórico de movimentação

## 🔗 Integrações

### Google Maps API
- **Embed Maps**: Visualização de localização
- **Geocoding API**: Conversão coordenadas → endereço
- **API Key**: Configurada no componente

### Backend PraFrota
- **Endpoint**: `https://prafrota-be-bff-tenant-api.grupopra.tech/api/v1/routes`
- **Fallback**: Dados mock quando offline
- **Health Check**: Monitoramento automático

## 📊 Dados Mock

O serviço gera automaticamente 50 rotas de exemplo com:
- Distribuição realista por tipo (First Mile, Line Haul, Last Mile)
- Status variados (pendente, em andamento, concluída, etc.)
- Coordenadas de cidades brasileiras
- Produtos diversos (eletrônicos, medicamentos, etc.)

## 🔮 Roadmap

### Próximas Funcionalidades
- [ ] **Paradas**: Gestão de pontos de parada
- [ ] **Custos**: Controle financeiro da rota
- [ ] **Documentos**: Upload de documentos
- [ ] **Histórico**: Auditoria completa
- [ ] **Notificações**: Alertas em tempo real
- [ ] **Relatórios**: Dashboard de métricas

### Melhorias Técnicas
- [ ] Testes unitários completos
- [ ] Otimização de performance
- [ ] Cache avançado
- [ ] WebSocket para tempo real
- [ ] PWA para uso offline

## 🐛 Troubleshooting

### Build Errors
Se houver erros de build:
1. Verifique se todos os imports estão corretos
2. Execute `ng build idt_app --configuration development`
3. Verifique console para erros específicos

### Componente Dinâmico
Se o rastreamento não carregar:
1. Verifique registro no `DynamicComponentResolverService`
2. Confirme método `getRouteLocationData()` no `GenericTabFormComponent`
3. Verifique logs no console do navegador

### API Offline
O sistema automaticamente usa dados mock quando:
- Backend não está disponível
- Rede está offline
- Timeout de requisições

## 👥 Contribuição

Para contribuir com o módulo:
1. Siga os padrões estabelecidos do PraFrota
2. Use componentes standalone
3. Implemente testes adequados
4. Documente mudanças significativas
5. Mantenha compatibilidade com `BaseDomainComponent`

---

**Criado em**: Janeiro 2025  
**Última Atualização**: Janeiro 2025  
**Versão**: 1.0.0  
**Compatibilidade**: Angular 19.2.x, PraFrota Framework 