name: Run Tests

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

jobs:
  test:
    runs-on: ubuntu-latest

    strategy:
      matrix:
        node-version: [16.x, 18.x, 20.x]

    steps:
      - uses: actions/checkout@v4

      - name: Setup Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@v3
        with:
          node-version: ${{ matrix.node-version }}
          cache: 'npm'

      - name: Install dependencies
        run: npm ci

      - name: Build package
        run: npm run build

      - name: Run bundler tests
        run: npx jest test/scripts/esbuild.browser.bundle.test.ts --no-coverage

      - name: Run admin entry point tests
        run: npx jest test/scripts/admin.entry-point.test.ts --no-coverage

      - name: Verify browser bundle has no Node.js dependencies
        run: |
          # Verify no firebase-admin in main entry point
          if grep -q "firebase-admin" dist/esm/index.js; then
            echo "ERROR: Main entry point (index.js) contains firebase-admin references"
            exit 1
          fi
          echo "✓ Main entry point is clean (no firebase-admin references)"
          
          # Verify admin entry point does have firebase-admin
          if ! grep -q "firebase-admin" dist/esm/admin.js; then
            echo "ERROR: Admin entry point (admin.js) missing firebase-admin references"
            exit 1
          fi
          echo "✓ Admin entry point correctly contains firebase-admin"

      - name: Verify type definitions are clean
        run: |
          # Verify no firebase-admin in main type definitions
          if grep -q "firebase-admin" dist/esm/index.d.ts; then
            echo "ERROR: Main type definitions contain firebase-admin references"
            exit 1
          fi
          echo "✓ Main type definitions are clean"
          
          if grep -q "firebase-admin" dist/esm/repository.d.ts; then
            echo "ERROR: Repository type definitions contain firebase-admin references"
            exit 1
          fi
          echo "✓ Repository type definitions are clean"
          
          # Admin types should have firebase-admin references
          if ! grep -q "firebase-admin" dist/esm/admin.d.ts; then
            echo "ERROR: Admin type definitions missing firebase-admin references"
            exit 1
          fi
          echo "✓ Admin type definitions correctly contain firebase-admin"

  lint:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4

      - name: Setup Node.js
        uses: actions/setup-node@v3
        with:
          node-version: '18.x'
          cache: 'npm'

      - name: Install dependencies
        run: npm ci

      - name: Run linter
        run: npm run lint
        continue-on-error: true  # Don't fail CI on lint warnings
