# Contributing Guide

Welcome! This guide helps you contribute to the Tibber Prices integration.

## Getting Started

### Prerequisites

- Git
- VS Code with Remote Containers extension
- Docker Desktop

### Fork and Clone

1. Fork the repository on GitHub
2. Clone your fork:
    ```bash
    git clone https://github.com/YOUR_USERNAME/hass.tibber_prices.git
    cd hass.tibber_prices
    ```
3. Open in VS Code
4. Click "Reopen in Container" when prompted

The DevContainer will set up everything automatically.

## Development Workflow

### 1. Create a Branch

```bash
git checkout -b feature/your-feature-name
# or
git checkout -b fix/issue-123-description
```

**Branch naming:**

- `feature/` - New features
- `fix/` - Bug fixes
- `docs/` - Documentation only
- `refactor/` - Code restructuring
- `test/` - Test improvements

### 2. Make Changes

Edit code, following [Coding Guidelines](coding-guidelines.md).

**Run checks frequently:**

```bash
./scripts/type-check  # Pyright type checking
./scripts/lint        # Ruff linting (auto-fix)
./scripts/test        # Run tests
```

### 3. Test Locally

```bash
./scripts/develop     # Start HA with integration loaded
```

Access at http://localhost:8123

### 4. Write Tests

Add tests in `/tests/` for new features:

```python
@pytest.mark.unit
async def test_your_feature(hass, coordinator):
    """Test your new feature."""
    # Arrange
    coordinator.data = {...}

    # Act
    result = your_function(coordinator.data)

    # Assert
    assert result == expected_value
```

Run your test:

```bash
./scripts/test tests/test_your_feature.py -v
```

### 5. Commit Changes

Follow [Conventional Commits](https://www.conventionalcommits.org/):

```bash
git add .
git commit -m "feat(sensors): add volatility trend sensor

Add new sensor showing 3-hour volatility trend direction.
Includes attributes with historical volatility data.

Impact: Users can predict when prices will stabilize or continue fluctuating."
```

**Commit types:**

- `feat:` - New feature
- `fix:` - Bug fix
- `docs:` - Documentation
- `refactor:` - Code restructuring
- `test:` - Test changes
- `chore:` - Maintenance

**Add scope when relevant:**

- `feat(sensors):` - Sensor platform
- `fix(coordinator):` - Data coordinator
- `docs(user):` - User documentation

### 6. Push and Create PR

```bash
git push origin your-branch-name
```

Then open Pull Request on GitHub.

## Pull Request Guidelines

### PR Template

Title: Short, descriptive (50 chars max)

Description should include:

```markdown
## What

Brief description of changes

## Why

Problem being solved or feature rationale

## How

Implementation approach

## Testing

- [ ] Manual testing in Home Assistant
- [ ] Unit tests added/updated
- [ ] Type checking passes
- [ ] Linting passes

## Breaking Changes

(If any - describe migration path)

## Related Issues

Closes #123
```

### PR Checklist

Before submitting:

- [ ] Code follows [Coding Guidelines](coding-guidelines.md)
- [ ] All tests pass (`./scripts/test`)
- [ ] Type checking passes (`./scripts/type-check`)
- [ ] Linting passes (`./scripts/lint-check`)
- [ ] Documentation updated (if needed)
- [ ] AGENTS.md updated (if patterns changed)
- [ ] Commit messages follow Conventional Commits

### Review Process

1. **Automated checks** run (CI/CD)
2. **Maintainer review** (usually within 3 days)
3. **Address feedback** if requested
4. **Approval** → Maintainer merges

## Code Review Tips

### What Reviewers Look For

✅ **Good:**

- Clear, self-explanatory code
- Appropriate comments for complex logic
- Tests covering edge cases
- Type hints on all functions
- Follows existing patterns

❌ **Avoid:**

- Large PRs (>500 lines) - split into smaller ones
- Mixing unrelated changes
- Missing tests for new features
- Breaking changes without migration path
- Copy-pasted code (refactor into shared functions)

### Responding to Feedback

- Don't take it personally - we're improving code together
- Ask questions if feedback unclear
- Push additional commits to address comments
- Mark conversations as resolved when fixed

## Finding Issues to Work On

Good first issues are labeled:

- `good first issue` - Beginner-friendly
- `help wanted` - Maintainers welcome contributions
- `documentation` - Docs improvements

Comment on issue before starting work to avoid duplicates.

## Communication

- **GitHub Issues** - Bug reports, feature requests
- **Pull Requests** - Code discussion
- **Discussions** - General questions, ideas

Be respectful, constructive, and patient. We're all volunteers! 🙏

---

💡 **Related:**

- [Setup Guide](setup.md) - DevContainer setup
- [Coding Guidelines](coding-guidelines.md) - Style guide
- [Testing](testing.md) - Writing tests
- [Release Management](release-management.md) - How releases work
