# App de Entregas com Rotas Curvas - Expo Go

Este aplicativo React Native com Expo foi desenvolvido para gerenciamento de entregas com rotas curvas como o Uber, funcionando perfeitamente no Expo Go.

## 🚀 Funcionalidades

- **Rotas Curvas**: Usa a API do Mapbox para traçar rotas que seguem as ruas, nunca em linha reta
- **Compatível com Expo Go**: Funciona sem necessidade de dev build ou EAS Build
- **Ordenação Inteligente**: Algoritmo do vizinho mais próximo para otimizar rotas
- **Interface Moderna**: UI/UX inspirada no Uber com mapas interativos
- **Gestão de Entregas**: Status tracking, fotos, assinaturas e sincronização

## 🛠️ Tecnologias Utilizadas

- **React Native** com **Expo SDK 53**
- **react-native-maps** para mapas (compatível com Expo Go)
- **API do Mapbox** para rotas curvas
- **TypeScript** para tipagem segura
- **AsyncStorage** e **SQLite** para persistência local
- **React Navigation** para navegação

## 📱 Componentes Principais

### 1. DeliveryMap
Componente principal que renderiza o mapa com rotas curvas:
- Usa `react-native-maps` (compatível com Expo Go)
- Integra com API do Mapbox para rotas
- Mostra marcadores coloridos por status
- Suporte a modo fullscreen

### 2. useMapboxDirections
Hook customizado para obter rotas da API do Mapbox:
- Calcula rotas otimizadas entre múltiplos pontos
- Converte coordenadas GeoJSON para react-native-maps
- Tratamento de erros e fallbacks

### 3. sortDeliveriesByDistanceAndDate
Função que implementa o algoritmo do vizinho mais próximo:
- Calcula distâncias usando fórmula de Haversine
- Ordena entregas por proximidade e data
- Suporte a geocodificação de endereços

## 🗺️ Como as Rotas Funcionam

1. **Coleta de Coordenadas**: O app coleta coordenadas das entregas (lat/lng)
2. **Ordenação**: Aplica algoritmo do vizinho mais próximo para otimizar rota
3. **API Mapbox**: Envia waypoints ordenados para a API de direções
4. **Rota Curva**: Recebe coordenadas que seguem as ruas (GeoJSON)
5. **Renderização**: Desenha Polyline no mapa com as coordenadas recebidas

## 🚀 Como Executar

```bash
# Instalar dependências
npm install

# Iniciar o projeto
npx expo start

# Escanear QR code no Expo Go
```

## 🔧 Configuração

### Token do Mapbox
O token já está configurado no código. Para usar seu próprio:

1. Crie uma conta em [mapbox.com](https://mapbox.com)
2. Gere um token de acesso público
3. Substitua em `src/hooks/useMapboxDirections.ts`

### API de Entregas
Configure sua API em `src/services/api.ts`:
- URL base da API
- Endpoints de autenticação e entregas
- Headers de autorização

## 📊 Estrutura de Dados

### Interface Delivery
```typescript
interface Delivery {
  id: string;
  outId: number;
  customerName: string;
  street: string;
  streetNumber: string;
  neighborhood: string;
  city: string;
  state: string;
  customerPhone: string;
  lat: number | null;
  lng: number | null;
  status: 'in_progress' | 'completed' | 'pending';
  coordinates?: {
    latitude: number;
    longitude: number;
  };
  // ... outras propriedades
}
```

## 🎯 Vantagens da Solução

### ✅ Compatibilidade com Expo Go
- Usa apenas bibliotecas compatíveis com Expo Go
- Não requer dev build ou EAS Build
- Funciona imediatamente após `expo start`

### ✅ Rotas Realistas
- Seguem as ruas reais (não linhas retas)
- Consideram sentido das vias
- Evitam vias bloqueadas ou restritas

### ✅ Performance Otimizada
- Algoritmo eficiente de ordenação
- Cache de rotas para evitar requisições desnecessárias
- Lazy loading de componentes de mapa

### ✅ UX Profissional
- Interface similar ao Uber
- Feedback visual em tempo real
- Navegação intuitiva entre telas

## 🔄 Fluxo de Trabalho

1. **Login**: Autenticação do entregador
2. **Lista de Entregas**: Visualização de todas as entregas do dia
3. **Rotas**: Mapa com rota otimizada e marcadores
4. **Detalhes**: Informações completas da entrega
5. **Navegação**: Integração com apps de navegação
6. **Finalização**: Captura de fotos e assinatura

## 🐛 Troubleshooting

### Mapa não carrega
- Verifique conexão com internet
- Confirme se o token do Mapbox está válido
- Teste em dispositivo físico (melhor que emulador)

### Rotas não aparecem
- Verifique se as entregas têm coordenadas válidas
- Confirme se a API do Mapbox está respondendo
- Verifique logs no console para erros

### Performance lenta
- Reduza número de marcadores simultâneos
- Implemente virtualização para listas grandes
- Use cache para rotas já calculadas

## 📈 Próximos Passos

- [ ] Implementar cache offline de rotas
- [ ] Adicionar suporte a múltiplos veículos
- [ ] Integrar com sistema de tráfego em tempo real
- [ ] Implementar notificações push
- [ ] Adicionar analytics de performance

## 🤝 Contribuição

1. Fork o projeto
2. Crie uma branch para sua feature
3. Commit suas mudanças
4. Push para a branch
5. Abra um Pull Request

## 📄 Licença

Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.

---

**Desenvolvido para funcionar perfeitamente no Expo Go com rotas curvas como o Uber! 🚚🗺️**