name: WordPress Plugin CI

on:
  push:
    branches: [ main, develop ]
  pull_request:
    branches: [ main, develop ]

jobs:
  php-tests:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        php-versions: ['7.4', '8.0', '8.1', '8.2', '8.3']
    steps:
      - uses: actions/checkout@v2

      - name: Setup PHP
        uses: shivammathur/setup-php@v2
        with:
          php-version: ${{ matrix.php-versions }}
          extensions: mbstring, intl
          tools: composer:v2

      - name: Validate composer.json and composer.lock
        run: composer validate

      - name: Get composer cache directory
        id: composer-cache
        run: echo "::set-output name=dir::$(composer config cache-files-dir)"

      - name: Cache dependencies
        uses: actions/cache@v2
        with:
          path: ${{ steps.composer-cache.outputs.dir }}
          key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
          restore-keys: ${{ runner.os }}-composer-

      - name: Install dependencies
        run: composer install --prefer-dist --no-progress

      - name: Run PHP Syntax Check
        run: find . -name "*.php" -not -path "./vendor/*" -not -path "./build/*" -not -path "./dist/*" -print0 | xargs -0 -n1 -P4 php -l

      - name: PHP Code Sniffer
        run: vendor/bin/phpcs --config-set ignore_warnings_on_exit 1 --report=full --standard=WordPress --extensions=php --ignore=*/vendor/*,*/node_modules/* .

      - name: PHP Compatibility Check
        run: vendor/bin/phpcs --config-set ignore_warnings_on_exit 1 --standard=PHPCompatibilityWP --runtime-set testVersion 7.4- --ignore=*/vendor/*,*/node_modules/* .

      - name: PHP Mess Detector (Unused Code)
        run: vendor/bin/phpmd . text unusedcode --exclude=vendor/,node_modules/

  i18n:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2

      - name: Setup PHP
        uses: shivammathur/setup-php@v2
        with:
          php-version: '7.4'
          extensions: mbstring, intl
          tools: composer:v2, wp-cli

      - name: Check for text-domain mismatches
        run: wp i18n make-pot . languages/search_tracker.pot --exclude="vendor,node_modules" --skip-audit

      - name: Check for JavaScript translations
        run: wp i18n make-json languages --no-purge

  assets:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2

      - name: Check plugin assets
        run: |
          if [ ! -f ".wordpress-org/icon-256x256.png" ]; then
            echo "Error: .wordpress-org/icon-256x256.png is missing"
            exit 1
          fi
          if [ ! -f ".wordpress-org/banner-1544x500.png" ]; then
            echo "Error: .wordpress-org/banner-1544x500.png is missing"
            exit 1
          fi

  svn-check:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2

      - name: Check for .svn directory
        run: |
          if [ -d ".svn" ]; then
            echo "Error: .svn directory should not be in the Git repository"
            exit 1
          fi