name: Flutter

on:
  push:
    branches:
      - "develop"
      - "main"
  pull_request:

jobs:
  lint:
    runs-on: macos-latest
    steps:
      - uses: actions/checkout@v4
      
      - name: Set Up Flutter
        uses: subosito/flutter-action@v2
        with:
          flutter-version: '3.29.2'
          channel: 'stable'
          
      - name: Check Formatting
        run: flutter analyze
          
  format:
    runs-on: macos-latest
    needs: lint
    if: ${{ failure() && needs.lint.result == 'failure' && github.event_name == 'push' && github.ref == 'refs/heads/develop'}} 
    steps:
      - uses: actions/checkout@v4
      
      - name: Set Up Flutter
        uses: subosito/flutter-action@v2
        with:
          flutter-version: '3.29.2'
          channel: 'stable'
          
      - name: Get & upgrade dependencies
        run: |
          flutter pub get
          flutter pub upgrade --major-versions
          
      - name: Auto-format
        run: |
          dart format .
          dart fix --apply

      - name: Check for changes
        id: check_changes
        run: |
          if [[ $(git status --porcelain) ]]; then
            echo "changes_detected=true" >> $GITHUB_OUTPUT
          else
            echo "changes_detected=false" >> $GITHUB_OUTPUT
          fi
            
      - name: Commit Changes
        if: steps.check_changes.outputs.changes_detected == 'true'
        run: |
          git config --global user.name "GitHub Actions"
          git config --global user.email "actions@github.com"
          git add .
          git commit -m "Actions: Auto-formatting [skip ci]"
          git push
    
  test:
    runs-on: macos-latest
    if: always()
    needs: [lint, format]

    steps:
      - uses: actions/checkout@v4
      
      - name: Set Up Flutter
        uses: subosito/flutter-action@v2
        with:
          flutter-version: '3.29.2'
          channel: 'stable'
          
      - name: Run Tests
        run: flutter test

    
  build:
    runs-on: macos-latest
    if: false # skips job
    needs: [lint, format, test]
    
    steps:
      - uses: actions/checkout@v4
      
      - name: Set Up Flutter
        uses: subosito/flutter-action@v2
        with:
          flutter-version: '3.29.2'
          channel: 'stable'

      - name: Install dependencies
        run: flutter pub get

      - name: Analyze project source
        run: flutter analyze --fatal-infos
        
      - name: Run App
        run: flutter run
