---
name: localize

on:
  push:
    branches: [master]
    paths:  # prevents workflow from running unless these files change
      - '.github/workflows/localize.yml'
      - 'src/**'
      - 'locale/sunshine.po'
  workflow_dispatch:

env:
  file: ./locale/sunshine.po

jobs:
  localize:
    name: Update Localization
    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Install Python 3.9
        uses: actions/setup-python@v5  # https://github.com/actions/setup-python
        with:
          python-version: '3.9'

      - name: Set up Python 3.9 Dependencies
        run: |
          cd ./scripts
          python -m pip install --upgrade pip setuptools
          python -m pip install -r requirements.txt

      - name: Set up xgettext
        run: |
          sudo apt-get update -y && \
          sudo apt-get --reinstall install -y \
          gettext

      - name: Update Strings
        run: |
          # first, try to remove existing file as xgettext does not remove unused translations
          if [ -f "${{ env.file }}" ];
          then
              rm ${{ env.file }}
              echo "new_file=false" >> $GITHUB_ENV
          else
              echo "new_file=true" >> $GITHUB_ENV
          fi

          # extract the new strings
          python ./scripts/_locale.py --extract

      - name: git diff
        if: ${{ env.new_file == 'false' }}
        run: |
          # disable the pager
          git config --global pager.diff false

          # print the git diff
          git diff locale/sunshine.po

          # set the variable with minimal output, replacing `\t` with ` `
          OUTPUT=$(git diff --numstat locale/sunshine.po | sed -e "s#\t# #g")
          echo "git_diff=${OUTPUT}" >> $GITHUB_ENV

      - name: git reset
        # only run if a single line changed (date/time) and file already existed
        if: ${{ env.git_diff == '1 1 locale/sunshine.po' && env.new_file == 'false' }}
        run: |
          git reset --hard

      - name: Get current date
        id: date
        run: echo "date=$(date +'%Y-%m-%d')" >> $GITHUB_OUTPUT

      - name: Create/Update Pull Request
        uses: peter-evans/create-pull-request@v7
        with:
          add-paths: |
            locale/*.po
          token: ${{ secrets.GH_BOT_TOKEN }}  # must trigger PR tests
          commit-message: "chore(l10n): new babel updates"
          branch: localize/update
          delete-branch: true
          base: master
          title: "chore(l10n): new babel updates"
          body: |
            Update report
            - Updated ${{ steps.date.outputs.date }}
            - Auto-generated by [create-pull-request][1]

            [1]: https://github.com/peter-evans/create-pull-request
          labels: |
            babel
            l10n