name: Upload Translations to POEditor on PR Merge

on:
  pull_request:
    types: [closed]
    branches:
      - develop
    paths:
      - "client/src/locales/**"

jobs:
  upload-translations:
    # Only run if the PR was merged (not just closed) or manually triggered
    if: github.event.pull_request.merged == true
    runs-on: ubuntu-latest

    steps:
      - name: Checkout code
        uses: actions/checkout@v3
        with:
          fetch-depth: 0 # Fetch all history to get changed files

      - name: Setup Node.js
        uses: actions/setup-node@v3
        with:
          node-version: "22"

      - name: Create package.json for scripts
        run: |
          mkdir -p .github/scripts
          cat > .github/scripts/package.json << EOF
          {
            "name": "poeditor-scripts",
            "version": "1.0.0",
            "private": true,
            "type": "module",
            "dependencies": {
              "axios": "^1.6.0",
              "fs-extra": "^11.1.1",
              "form-data": "^4.0.0"
            }
          }
          EOF

      - name: Install dependencies
        run: |
          cd .github/scripts
          npm install

      - name: Get changed locale files
        id: changed-files
        if: github.event_name == 'pull_request'
        run: |
          # Get base and head commits
          BASE_SHA=${{ github.event.pull_request.base.sha }}
          HEAD_SHA=${{ github.event.pull_request.head.sha }}

          echo "Base SHA: $BASE_SHA"
          echo "Head SHA: $HEAD_SHA"

          # Get list of changed files in client/src/locales directory
          CHANGED_FILES=$(git diff --name-only $BASE_SHA..$HEAD_SHA -- 'client/src/locales/*.json' || git ls-files 'client/src/locales/*.json')

          if [ -z "$CHANGED_FILES" ]; then
            echo "No changes detected in locale files"
            echo "CHANGED_FILES=" >> $GITHUB_ENV
          else
            echo "Changed files:"
            echo "$CHANGED_FILES"
            echo "CHANGED_FILES<<EOF" >> $GITHUB_ENV
            echo "$CHANGED_FILES" >> $GITHUB_ENV
            echo "EOF" >> $GITHUB_ENV
          fi

      - name: Upload changed translations to POEditor
        if: env.CHANGED_FILES != ''
        env:
          POEDITOR_API: ${{ secrets.POEDITOR_API }}
          POEDITOR_PROJECT_ID: ${{ secrets.POEDITOR_PROJECT_ID }}
        run: |
          # Process each changed file
          for FILE in $CHANGED_FILES; do
            if [[ -f "$FILE" ]]; then
              # Extract language code from filename (e.g., client/src/locales/en.json -> en)
              FILENAME=$(basename "$FILE")
              
              # Special case: map gb.json to en language code
              if [ "$FILENAME" == "gb.json" ]; then
                LANG="en"
                echo "Found gb.json, mapping to language code 'en'"
              else
                LANG=$(basename "$FILE" .json)
              fi
              
              echo "Processing $FILE for language $LANG"
              
              # Upload to POEditor
              LANGUAGE=$LANG FILE_PATH=$FILE node .github/scripts/upload-translations.js
            fi
          done

      - name: Notify on success
        if: success() && env.CHANGED_FILES != ''
        run: |
          echo "Successfully uploaded translation files to POEditor."
          if [ "${{ github.event_name }}" == "workflow_dispatch" ]; then
            echo "Manual trigger comment: ${{ github.event.inputs.comment }}"
          fi

      - name: Notify on no changes
        if: env.CHANGED_FILES == ''
        run: |
          echo "No translation files were found to upload."
