name: CI

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

jobs:
  test:
    runs-on: macos-15
    
    strategy:
      matrix:
        node-version: [20.x, 22.x]
    
    env:
      DEVELOPER_DIR: /Applications/Xcode_16.3.app/Contents/Developer
    
    steps:
    - uses: actions/checkout@v4
    
    - name: Set up Xcode
      run: |
        sudo xcode-select -s $DEVELOPER_DIR
        xcodebuild -version
        swift --version
    
    - name: Build Swift CLI for tests
      run: |
        cd peekaboo-cli
        swift build -c release
        # Copy the binary to the expected location
        cp .build/release/peekaboo ../peekaboo
        cd ..
        # Make it executable
        chmod +x peekaboo
        # Verify it exists
        ls -la peekaboo
    
    - name: Use Node.js ${{ matrix.node-version }}
      uses: actions/setup-node@v4
      with:
        node-version: ${{ matrix.node-version }}
        cache: 'npm'
    
    - name: Install dependencies
      run: npm ci
    
    - name: Build TypeScript
      run: npm run build
    
    - name: Run linter
      run: npm run lint --if-present
    
    - name: Run tests with coverage
      run: npm run test:coverage
      env:
        CI: true
    
    - name: Upload coverage to Codecov
      uses: codecov/codecov-action@v4
      if: matrix.node-version == '20.x'
      with:
        file: ./coverage/lcov.info
        flags: unittests
        name: codecov-umbrella
        fail_ci_if_error: false

  build-swift:
    runs-on: macos-15
    timeout-minutes: 30
    
    env:
      DEVELOPER_DIR: /Applications/Xcode_16.3.app/Contents/Developer
    
    steps:
    - uses: actions/checkout@v4
    
    - name: Set up Xcode
      run: |
        sudo xcode-select -s $DEVELOPER_DIR
        xcodebuild -version
        swift --version
    
    - name: Build Swift CLI
      run: |
        cd peekaboo-cli
        swift build -c release
    
    - name: Run Swift tests
      timeout-minutes: 10
      run: |
        cd peekaboo-cli
        swift test --parallel --skip "LocalIntegrationTests|ScreenshotValidationTests|ApplicationFinderTests|WindowManagerTests"
      env:
        CI: true