# rpa-arc

![PyPI - Version](https://img.shields.io/pypi/v/rpa-arc)
![PyPI - Python Version](https://img.shields.io/pypi/pyversions/rpa-arc)
![PyPI - License](https://img.shields.io/pypi/l/rpa-arc)
![PyPI - Status](https://img.shields.io/pypi/status/rpa-arc)

**rpa-arc** é a ferramenta definitiva para iniciar projetos RPA em Python. Com um único comando, ela cria uma arquitetura robusta, escalável e pronta para produção.

> "Sem firula, na lata: one command and you are ready to automate."

## 🚀 Por que rpa-arc?

- **Zero Config**: Esqueça o boilerplate. Instale e rode.
- **Padronização**: Todos os bots da sua equipe seguindo a mesma estrutura.
- **Features Enterprise**: Logs rotacionados, Driver com auto-healing, API Client com retry.
- **Flexível**: Suporta desde scripts simples até arquiteturas complexas em containers.

## 📦 Instalação

```bash
pip install rpa-arc
```

## 🛠️ Uso

### Criar Novo Projeto

Para criar um novo projeto em uma pasta específica:

```bash
rpa-arc meu-novo-bot
```

Isso criará a pasta `meu-novo-bot/` com toda a estrutura dentro.

### Na Pasta Atual

Se você já criou a pasta e quer apenas popular a estrutura nela:

```bash
# Estando dentro da pasta do projeto
rpa-arc
```

### Opções Avançadas

- **`-f`, `--force`**: Adiciona arquivos faltantes sem sobrescrever os existentes. Útil para atualizar projetos antigos.
- **`-m`, `--minimal`**: Cria uma versão "leve" da estrutura, sem arquivos Docker e sem o módulo de API. Ideal para bots locais simples.

```bash
# Exemplo: Atualizar estrutura de um projeto existente sem perder código
rpa-arc --force

# Exemplo: Criar bot simples sem Docker/API
rpa-arc bot-simples --minimal
```

## 📂 Estrutura Gerada

Abaixo, a arquitetura completa gerada pela ferramenta:

```text
meu-projeto/
├── src/
│   ├── app/
│   │   └── app.py           # Onde seu código de negócio reside
│   ├── core/
│   │   ├── logger.py        # Logger configurado com TimedRotatingFileHandler
│   │   └── driver.py        # Wrapper do Selenium com gestão avançada
│   ├── api/
│   │   └── Api.py           # (Opcional) Cliente HTTP com Retry e Auth JWT
│   ├── integracoes/         # Espaço para integrações com sistemas terceiros
│   └── utils/               # Funções auxiliares
├── config/                  # Arquivos JSON/YAML de configuração
├── dados/                   # Diretório padrão para downloads e inputs
├── logs/                    # Logs gerados (ignorados no git)
├── tests/                   # Testes unitários
├── .env                     # Variáveis de ambiente (template)
├── .gitignore               # Ignora venv, logs, pycache, etc.
├── Dockerfile               # (Opcional) Pronto para deploy
├── main.py                  # Entrypoint simples
├── readme.md                # Documentação inicial do seu bot
└── requirements.txt         # Dependências do projeto
```

## ✨ Funcionalidades do Core

### 1. Gerenciador de Navegador (`src.core.driver`)
O `GerenciadorNavegador` não é apenas um wrapper do Selenium. Ele resolve as dores de cabeça comuns de RPA:

- **Gestão de Temp Files**: Cria perfis de usuário temporários (`user-data-dir`) isolados para evitar conflitos de cache/sessão entre execuções paralelas.
- **Auto-Cleanup**: Limpa diretórios temporários antigos e mata processos órfãos do Chrome.
- **Modo Headless**: Detecta ambiente Linux e ativa headless automaticamente se necessário.
- **Fallback**: Se o diretório de perfil falhar, ele tenta um modo de recuperação automaticamente.

```python
from src.core.driver import GerenciadorNavegador

# Inicia navegador (baixa driver automaticamente se necessário)
nav = GerenciadorNavegador()
driver = nav.obter_navegador()

driver.get("https://google.com")
```

### 2. Logger Robusto (`src.core.logger`)
Logs são a vida do RPA. O nosso logger já vem com:

- **Rotação Diária**: Arquivos separados por dia (`2024-02-01.log`).
- **Timezone Aware**: Configurado para `America/Sao_Paulo` por padrão (ajustável via `.env`).
- **Dual Output**: Escreve no arquivo e no console simultaneamente.

```python
from src.core.logger import Logger

log = Logger().get_logger()
log.info("Processo iniciado")
log.error("Falha ao encontrar seletor X")
```

### 3. API Client (`src.api.Api`)
*Disponível na estrutura completa.*

Um cliente HTTP Wrapper sobre o `requests` que implementa:

- **Auth JWT**: Gerencia tokens Bearer e renova automaticamente se expirados (via método `CheckToken`).
- **Smart Retry**: Tenta novamente em caso de falhas de rede ou Rate Limit (429), com backoff exponencial.
- **Integração S3**: Métodos prontos para upload de arquivos de log.

## ⚙️ Configuração (.env)

O sistema espera um arquivo `.env` na raiz. Um template é gerado automaticamente:

```properties
# Credenciais da API (se usar)
BASE_URL_API_RPA="https://api..."
USERNAME_API_RPA=user
PASSWORD_API_RPA=pass

# Configuração de Log
LOG_LEVEL=DEBUG
LOG_TZ=America/Sao_Paulo
```

## 🐳 Docker

A estrutura completa já inclui um `Dockerfile` otimizado baseado em `python:3.12-slim`. Ele instala as dependências de sistema necessárias para o Chrome rodar em ambiente Linux (Debian/Ubuntu), incluindo fontes e libs gráficas.

Para rodar:

```bash
docker build -t meu-bot .
docker run --rm meu-bot
```

## 🤝 Contribuição

Sua ajuda é bem-vinda!
1. Fork o projeto.
2. Crie uma branch (`git checkout -b feature/NovaFeature`).
3. Commit (`git commit -m 'Add NovaFeature'`).
4. Push (`git push origin feature/NovaFeature`).
5. Abra um Pull Request.

## 📝 Licença

MIT License.
