name: Setup Mobile Environment

description: "Sets up the environment for mobile app builds"

inputs:
  app_path:
    description: "Path to the app directory"
    required: true
  node_version:
    description: "Node version"
    required: true
  ruby_version:
    description: "Ruby version"
    required: true
  workspace:
    description: "Workspace directory path"
    required: true

runs:
  using: "composite"
  steps:
    - name: Install locales and dialog for local development
      if: ${{ env.ACT }}
      shell: bash
      run: |
        sudo apt-get update
        sudo apt-get install -y locales dialog unzip

    # for fastlane
    - name: Install locales and dialog
      if: runner.os != 'macOS'
      shell: bash
      run: |
        sudo locale-gen en_US.UTF-8
        sudo update-locale LANG=en_US.UTF-8

    - name: Setup Ruby environment
      uses: ruby/setup-ruby@v1
      with:
        ruby-version: ${{ inputs.ruby_version }}

    - name: Setup Node.js environment
      uses: actions/setup-node@v4
      with:
        node-version: ${{ inputs.node_version }}

    - name: Configure bundler
      shell: bash
      run: |
        cd ${{ inputs.app_path }}
        bundle config set --local path 'vendor/bundle'
        bundle config set --local deployment 'true'
        echo "✅ Bundler configured for strict mode (deployment=true)"

    - name: Install app dependencies
      shell: bash
      run: |
        cd ${{ inputs.app_path }}

        # Configure Yarn
        corepack enable
        yarn set version 4.12.0

        echo "📦 Installing JavaScript dependencies with strict lock file..."
        if ! yarn install --immutable --inline-builds; then
          echo ""
          echo "❌ ERROR: yarn.lock is out of date!"
          echo ""
          echo "This happens when package.json was modified but yarn.lock wasn't updated."
          echo ""
          echo "To fix this:"
          echo "  1. Run 'yarn install' locally in the app directory"
          echo "  2. Commit the updated yarn.lock file"
          echo "  3. Push your changes"
          echo ""
          echo "This ensures everyone has the exact same dependency versions."
          exit 1
        fi

        # Run mobile-specific installation
        yarn install-app:mobile-deploy

    - name: Install Ruby dependencies
      shell: bash
      run: |
        cd ${{ inputs.app_path }}
        # Install Ruby gems with bundler (respecting cache)
        echo "📦 Installing Ruby gems with strict lock file..."
        if ! bundle install --jobs 4 --retry 3; then
          echo ""
          echo "❌ ERROR: Gemfile.lock is out of date!"
          echo ""
          echo "This happens when Gemfile was modified but Gemfile.lock wasn't updated."
          echo ""
          echo "To fix this:"
          echo "  1. Run 'bundle install' locally in the app directory"
          echo "  2. Commit the updated Gemfile.lock file"
          echo "  3. Push your changes"
          echo ""
          echo "This ensures everyone has the exact same gem versions."
          exit 1
        fi
