---
name: Submodule Updates

on:
  # We might want this on a schedule once this is in `main`
  push:
    branches: [ develop ]

jobs:
  check_submodules:
    name: Pull Request for updated submodules
    runs-on: ubuntu-latest
    env:
      PARENT_REPOSITORY: 'EDCD/EDMarketConnector'
      CHECKOUT_BRANCH: 'develop'
      PR_AGAINST_BRANCH: 'develop'
      OWNER: 'EDCD'

    steps:
      - uses: actions/checkout@v3
        with:
          submodules: true

      - name: Update submodules
        shell: bash
        run: |
          git config user.name github-actions
          git config user.email github-actions@github.com
          git submodule update --remote

      - name: Check for changes
        id: check_for_changes
        continue-on-error: true
        run: |
          changes=$(git status --porcelain)
          if [ -n "${changes}" ];
          then
            echo '::set-output changes=true'
          fi
          echo '::set-output changes=false'
          exit 0
      
      - name: Create submodules changes branch
        if: steps.check_for_changes.outputs.changes == 'true'
        run: |
          git checkout -b $GITHUB_RUN_ID
          git commit -am "updating submodules"
          git push --set-upstream origin $GITHUB_RUN_ID

      - name: Create pull request against target branch
        if: steps.check_for_changes.outputs.changes == 'true'
        uses: actions/github-script@v6
        with:
          github-token: ${{ inputs.github_token }}
          script: |
            await github.rest.pulls.create({
              owner: '${{ inputs.owner }}',
              repo: '${{ inputs.parent_repository }}'.split('/')[1].trim(),
              head: process.env.GITHUB_RUN_ID,
              base: '${{ inputs.pr_against_branch }}',
              title: `[Auto-generated] Submodule Updates ${process.env.GITHUB_RUN_ID}`,
              body: `[Auto-generated] Submodule Updates ${process.env.GITHUB_RUN_ID}`,
            });

      - name: Add labels
        if: steps.check_for_changes.outputs.changes == 'true'
        uses: actions/github-script@v6
        with:
          github-token: ${{ inputs.github_token }}
          script: |
            const res = await github.rest.issues.listForRepo({
              owner: '${{ inputs.owner }}',
              repo: '${{ inputs.parent_repository }}'.split('/')[1].trim(),
            });
            const pr = res.data.filter(i => i.title.includes(process.env.GITHUB_RUN_ID));
            const prNumber = pr[0].number;  
            await github.rest.issues.addLabels({
              issue_number: prNumber,
              owner: '${{ inputs.owner }}',
              repo: '${{ inputs.parent_repository }}'.split('/')[1].trim(),
              labels: ['${{ inputs.label }}']
            });
