name: Upload Coverage to Codecov (Push only)

on:
  push:
    branches:
      - main
      - development
      - 'feature/**'

permissions:
  contents: read

jobs:
  backend-codecov:
    name: Backend Codecov Upload
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
        with:
          fetch-depth: 0

      - name: Set up Go
        uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c # v6
        with:
          go-version: '1.25.5'
          cache-dependency-path: backend/go.sum

      - name: Run Go tests with coverage
        working-directory: ${{ github.workspace }}
        env:
          CGO_ENABLED: 1
        run: |
          bash scripts/go-test-coverage.sh 2>&1 | tee backend/test-output.txt
          exit ${PIPESTATUS[0]}

      - name: Upload backend coverage to Codecov
        uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5
        with:
          token: ${{ secrets.CODECOV_TOKEN }}
          files: ./backend/coverage.txt
          flags: backend
          fail_ci_if_error: true

  frontend-codecov:
    name: Frontend Codecov Upload
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
        with:
          fetch-depth: 0

      - name: Set up Node.js
        uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6
        with:
          node-version: '24.12.0'
          cache: 'npm'
          cache-dependency-path: frontend/package-lock.json

      - name: Install dependencies
        working-directory: frontend
        run: npm ci

      - name: Run frontend tests and coverage
        working-directory: ${{ github.workspace }}
        run: |
          bash scripts/frontend-test-coverage.sh 2>&1 | tee frontend/test-output.txt
          exit ${PIPESTATUS[0]}

      - name: Upload frontend coverage to Codecov
        uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5
        with:
          token: ${{ secrets.CODECOV_TOKEN }}
          directory: ./frontend/coverage
          flags: frontend
          fail_ci_if_error: true
