name: Bundle Analysis

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

jobs:
  bundle-analysis:
    name: Bundle Size Analysis
    runs-on: ubuntu-22.04
    
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Setup Bun
        uses: oven-sh/setup-bun@v2
        with:
          bun-version: latest

      - name: Install dependencies
        run: bun install --frozen-lockfile

      - name: Setup Rust
        uses: dtolnay/rust-toolchain@stable

      - name: Cache Rust dependencies
        uses: Swatinem/rust-cache@v2
        with:
          workspaces: src-tauri

      - name: Install system dependencies
        run: |
          sudo apt-get update
          sudo apt-get install -y build-essential gcc g++ make cmake
          sudo apt-get install -y clang libclang-dev llvm-dev
          sudo apt-get install -y libc6-dev linux-libc-dev
          sudo apt-get install -y ffmpeg libavcodec-dev libavformat-dev libavutil-dev libavfilter-dev libavdevice-dev libswscale-dev libswresample-dev pkg-config
          # GTK and GLib dependencies for Tauri
          sudo apt-get install -y libgtk-3-dev libwebkit2gtk-4.1-dev libglib2.0-dev libgdk-pixbuf2.0-dev libpango1.0-dev libatk1.0-dev libcairo-gobject2 libgtk-3-0 libgdk-pixbuf2.0-0
          # Set PKG_CONFIG_PATH
          echo "PKG_CONFIG_PATH=/usr/lib/x86_64-linux-gnu/pkgconfig:/usr/lib/pkgconfig:/usr/share/pkgconfig" >> $GITHUB_ENV

      - name: Create dist directory
        run: mkdir -p dist

      - name: Build Rust dependencies
        env:
          PKG_CONFIG_PATH: /usr/lib/x86_64-linux-gnu/pkgconfig:/usr/lib/pkgconfig:/usr/share/pkgconfig
        run: |
          cd src-tauri
          cargo build --release

      - name: Generate TypeScript bindings
        env:
          PKG_CONFIG_PATH: /usr/lib/x86_64-linux-gnu/pkgconfig:/usr/lib/pkgconfig:/usr/share/pkgconfig
        run: |
          cd src-tauri
          cargo run --bin generate_types

      - name: Build with bundle analysis
        env:
          CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
          CI: true
          GITHUB_SHA: ${{ github.sha }}
          GITHUB_REF_NAME: ${{ github.ref_name }}
          GITHUB_PR_NUMBER: ${{ github.event.pull_request.number }}
          GITHUB_RUN_ID: ${{ github.run_id }}
          GITHUB_REPOSITORY: ${{ github.repository }}
          # Enable debug logging for Codecov plugin
          DEBUG: "@codecov/*"
        run: |
          echo "Building with bundle analysis..."
          echo "CODECOV_TOKEN is $([ -n "$CODECOV_TOKEN" ] && echo "set" || echo "not set")"
          echo "CI environment variables:"
          echo "  GITHUB_SHA: $GITHUB_SHA"
          echo "  GITHUB_REF_NAME: $GITHUB_REF_NAME"
          echo "  GITHUB_PR_NUMBER: $GITHUB_PR_NUMBER"
          echo "  GITHUB_RUN_ID: $GITHUB_RUN_ID"
          # Create dist directory for Tauri
          mkdir -p dist
          # Build Next.js with static export for Tauri
          bun run build

      # Codecov плагин должен автоматически загрузить bundle stats во время сборки
      # Этот шаг является дополнительной страховкой на случай, если автоматическая загрузка не сработала
      - name: Upload bundle stats to Codecov (fallback)
        if: failure()
        uses: codecov/codecov-action@v5
        with:
          token: ${{ secrets.CODECOV_TOKEN }}
          flags: bundle
          name: bundle-analysis
          fail_ci_if_error: false
          verbose: true
          slug: chatman-media/timeline-studio