# Contribuindo para o ImgBoost 🤝

Obrigado por considerar contribuir com o ImgBoost! 

## Como Contribuir

### 🐛 Reportar Bugs

Se encontrou um bug, abra uma issue com:
- Descrição clara do problema
- Passos para reproduzir
- Comportamento esperado vs atual
- Screenshots (se aplicável)
- Informações do sistema (`imgboost info`)

### ✨ Sugerir Funcionalidades

Para sugerir novas funcionalidades:
- Abra uma issue com tag "enhancement"
- Descreva o caso de uso
- Explique por que seria útil
- Dê exemplos de uso

### 🔧 Pull Requests

1. **Fork o projeto**
   ```bash
   git clone https://github.com/yourusername/imgboost.git
   cd imgboost
   ```

2. **Crie uma branch**
   ```bash
   git checkout -b feature/minha-funcionalidade
   # ou
   git checkout -b fix/meu-bugfix
   ```

3. **Faça suas alterações**
   - Siga o estilo de código existente
   - Adicione testes se aplicável
   - Atualize a documentação
   - Adicione comentários quando necessário

4. **Teste suas mudanças**
   ```bash
   python test_imgboost.py
   ```

5. **Commit suas mudanças**
   ```bash
   git add .
   git commit -m "feat: adiciona funcionalidade X"
   # ou
   git commit -m "fix: corrige bug Y"
   ```

   **Padrão de commits:**
   - `feat:` nova funcionalidade
   - `fix:` correção de bug
   - `docs:` documentação
   - `style:` formatação
   - `refactor:` refatoração
   - `test:` testes
   - `chore:` tarefas gerais

6. **Push para o GitHub**
   ```bash
   git push origin feature/minha-funcionalidade
   ```

7. **Abra um Pull Request**
   - Descreva suas mudanças
   - Referencie issues relacionadas
   - Aguarde review

## Estrutura do Código

```
imgboost/
├── imgboost/
│   ├── cli.py              # Interface de linha de comando
│   ├── core.py             # Engine principal
│   ├── processors/         # Algoritmos de processamento
│   │   ├── filters.py      # Filtros gerais
│   │   ├── document.py     # Processamento de docs
│   │   └── superres.py     # Super-resolução
│   └── utils/
│       └── image_io.py     # I/O de imagens
```

## Guia de Estilo

### Python
- Siga PEP 8
- Use type hints quando possível
- Docstrings em português
- Máximo 100 caracteres por linha
- 4 espaços de indentação

**Exemplo:**
```python
def process_image(img: np.ndarray, strength: int = 10) -> np.ndarray:
    """
    Processa a imagem aplicando denoise.
    
    Args:
        img: Imagem BGR
        strength: Força do denoise (0-30)
        
    Returns:
        Imagem processada
    """
    # Código aqui
    pass
```

### Commits
- Use mensagens descritivas
- Primeira linha com no máximo 72 caracteres
- Use verbos no imperativo ("adiciona", não "adicionado")
- Referencie issues quando aplicável

**Exemplos bons:**
```
feat: adiciona suporte a processamento de PDF
fix: corrige erro ao carregar PNG com transparência
docs: atualiza README com novos exemplos
```

**Exemplos ruins:**
```
atualização
fix bug
mudanças várias
```

## Adicionando Novos Processadores

Para adicionar um novo processador:

1. **Crie o arquivo em `imgboost/processors/`**
   ```python
   # novo_processador.py
   class NovoProcessador:
       def __init__(self):
           pass
       
       def processar(self, img):
           # Sua lógica aqui
           return img
   ```

2. **Importe em `__init__.py`**
   ```python
   from .novo_processador import NovoProcessador
   
   __all__ = [..., 'NovoProcessador']
   ```

3. **Use no `core.py`**
   ```python
   from .processors import NovoProcessador
   
   self.novo = NovoProcessador()
   ```

4. **Adicione testes**
   ```python
   def test_novo_processador():
       proc = NovoProcessador()
       img = create_test_image()
       result = proc.processar(img)
       assert result is not None
   ```

5. **Documente**
   - Atualize o README
   - Adicione exemplo
   - Atualize CHANGELOG

## Adicionando Novos Modos

Para adicionar um novo modo de processamento:

1. **Adicione a opção no CLI** (`cli.py`)
   ```python
   @click.option('--mode', '-m', 
                 type=click.Choice(['general', 'text', 'dark', 'novo'], ...)
   ```

2. **Implemente no Engine** (`core.py`)
   ```python
   def _process_novo(self, img):
       """Pipeline do novo modo."""
       # Sua lógica
       return img
   ```

3. **Adicione ao switch de modos**
   ```python
   elif mode == 'novo':
       img = self._process_novo(img)
   ```

## Testes

Execute os testes antes de fazer PR:

```bash
# Testes básicos
python test_imgboost.py

# Teste manual
imgboost process test_image.jpg --mode general -v

# Teste de lote
imgboost batch test_images/ --workers 4
```

## Documentação

Ao adicionar funcionalidades, atualize:
- [ ] README.md (se for feature visível)
- [ ] QUICKSTART.md (se for uso básico)
- [ ] Docstrings no código
- [ ] CHANGELOG.md
- [ ] Exemplos em `examples.py`

## Checklist do PR

Antes de submeter seu PR, verifique:

- [ ] Código segue o guia de estilo
- [ ] Testes passam
- [ ] Documentação atualizada
- [ ] CHANGELOG atualizado
- [ ] Commit messages descritivos
- [ ] Sem arquivos desnecessários
- [ ] Branch está atualizada com main

## Dúvidas?

- 💬 Abra uma issue para discussão
- 📧 Entre em contato via email (se disponível)
- 🐛 Reporte bugs através de issues

## Código de Conduta

- Seja respeitoso e profissional
- Aceite críticas construtivas
- Foque no que é melhor para o projeto
- Mostre empatia com outros contribuidores

## Licença

Ao contribuir, você concorda que suas contribuições serão licenciadas sob a licença MIT.

---

**Obrigado por contribuir! 🎉**
