name: Auto Update .app-files

on:
  push:
    branches:
      - main
    paths:
      - 'ct/**.sh'
  workflow_dispatch: 

jobs:
  update-app-files:
    runs-on: runner-cluster-htl-set

    permissions:
      contents: write
      pull-requests: write

    steps:
      - name: Generate a token
        id: generate-token
        uses: actions/create-github-app-token@v1
        with:
          app-id: ${{ vars.APP_ID }}
          private-key: ${{ secrets.APP_PRIVATE_KEY }}

      # Step 1: Checkout repository
      - name: Checkout repository
        uses: actions/checkout@v2

      # Step 2: Disable file mode changes detection
      - name: Disable file mode changes
        run: git config core.fileMode false

      # Step 3: Set up Git user for committing changes
      - name: Set up Git
        run: |
          git config --global user.name "GitHub Actions"
          git config --global user.email "github-actions[bot]@users.noreply.github.com"

      # Step 4: Install figlet
      - name: Install figlet
        run: sudo apt-get install -y figlet

      # Step 5: Run the updated generate-app-files.sh script
      - name: Run generate-app-files.sh
        run: |
          chmod +x .github/workflows/scripts/generate-app-headers.sh
          .github/workflows/scripts/generate-app-headers.sh
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

      # Step 6: Check if there are any changes
      - name: Check if there are any changes
        run: |
          echo "Checking for changes..."
          git add -A  # Untracked Dateien aufnehmen
          git status
          if git diff --cached --quiet; then
            echo "No changes detected."
            echo "changed=false" >> "$GITHUB_ENV"
          else
            echo "Changes detected:"
            git diff --stat --cached
            echo "changed=true" >> "$GITHUB_ENV"
          fi

      # Step 7: Commit and create PR if changes exist
      - name: Commit and create PR if changes exist
        if: env.changed == 'true'
        run: |
          git commit -m "Update .app files"
          git checkout -b pr-update-app-files
          git push origin pr-update-app-files --force
          gh pr create --title "[core] update .app files" \
                       --body "This PR is auto-generated by a GitHub Action to update the .app files." \
                       --head pr-update-app-files \
                       --base main \
                       --label "automated pr"
        env:
          GH_TOKEN: ${{ steps.generate-token.outputs.token }}
      
      - name: Approve pull request
        if: env.changed == 'true'
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          PR_NUMBER=$(gh pr list --head "pr-update-app-files" --json number --jq '.[].number')
          if [ -n "$PR_NUMBER" ]; then
            gh pr review $PR_NUMBER --approve
          fi
          
      - name: Re-approve pull request after update
        if: env.changed == 'true'
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          PR_NUMBER=$(gh pr list --head "pr-update-app-files" --json number --jq '.[].number')
          if [ -n "$PR_NUMBER" ]; then
            gh pr review $PR_NUMBER --approve
          fi

      # Step 8: Output success message when no changes
      - name: No changes detected
        if: env.changed == 'false'
        run: echo "No changes to commit. Workflow completed successfully."