name: Update WAProto

on:
  schedule:
    - cron: '10 1 * * *'
  workflow_dispatch:

permissions:
  contents: write
  pull-requests: write

jobs:
  update-proto:
    runs-on: ubuntu-latest
    timeout-minutes: 10

    steps:
      - uses: actions/checkout@v3

      - name: Install Node
        uses: actions/setup-node@v3
        with:
          node-version: 20.x

      - name: Enable Corepack and Set Yarn Version
        run: |
          corepack enable
          corepack prepare yarn@4.x --activate

      - name: Configure Git for HTTPS
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          # Force git to use HTTPS instead of SSH for GitHub repositories
          git config --global url."https://github.com/".insteadOf "ssh://git@github.com/"
          git config --global url."https://github.com/".insteadOf "git@github.com:"
          # Configure git to use GITHUB_TOKEN for authentication
          git config --global url."https://x-access-token:${GITHUB_TOKEN}@github.com/".insteadOf "https://github.com/"

      - name: Install packages
        run: |
          yarn install --immutable
          yarn --cwd proto-extract install --immutable

      - name: Update WAProto.proto
        id: wa_proto_info
        run: |
          yarn --cwd proto-extract start > wa-logs.txt
          WA_VERSION=$(cat wa-logs.txt | perl -n -e'/Current version\: (.+)/ && print $1')
          WA_JS_URL=$(cat wa-logs.txt | perl -n -e'/Found source JS URL\: (.+)/ && print $1')
          echo "wa_version=$WA_VERSION" >> $GITHUB_OUTPUT
          echo "wa_js_url=$WA_JS_URL" >> $GITHUB_OUTPUT

      - name: GenerateStatics
        run: yarn gen:protobuf

      - name: Update baileys-version.json
        run: |
          WA_VERSION="${{steps.wa_proto_info.outputs.wa_version}}"
          WA_NUMBERS=$(echo $WA_VERSION | sed "s/\./, /g")
          echo -e "{\n\t\"version\": [$WA_NUMBERS]\n}" > src/Defaults/baileys-version.json

      - name: Create Pull Request
        uses: peter-evans/create-pull-request@v5
        with:
          commit-message: 'chore: updated proto/version to v${{steps.wa_proto_info.outputs.wa_version}}'
          title: 'Whatsapp v${{steps.wa_proto_info.outputs.wa_version}} proto/version change'
          branch: 'update-proto/stable'
          delete-branch: true
          labels: 'update-proto'
          body: "Automated changes\nFound source JS URL: ${{steps.wa_proto_info.outputs.wa_js_url}}\nCurrent version: v${{steps.wa_proto_info.outputs.wa_version}}"
          add-paths: |
            WAProto/*
            src/Defaults/baileys-version.json
