name: API CI

on:
  pull_request:
    branches:
      - develop
    paths:
      - 'epapi/**'
      - 'epdb/models.py'  # API depends on models
      - 'epdb/logic.py'   # API depends on business logic
      - 'tests/fixtures/**'  # API tests use fixtures
  workflow_dispatch:

jobs:
  api-tests:
    if: ${{ !contains(gitea.event.pull_request.title, 'WIP') }}
    runs-on: ubuntu-latest
    container:
      image: git.envipath.com/envipath/envipy-ci:latest

    services:
      postgres:
        image: postgres:16
        env:
          POSTGRES_USER: ${{ vars.POSTGRES_USER }}
          POSTGRES_PASSWORD: ${{ secrets.POSTGRES_PASSWORD }}
          POSTGRES_DB: ${{ vars.POSTGRES_DB }}
        ports:
          - ${{ vars.POSTGRES_PORT}}:5432
        options: >-
          --health-cmd="pg_isready -U postgres"
          --health-interval=10s
          --health-timeout=5s
          --health-retries=5

    env:
      RUNNER_TOOL_CACHE: /toolcache
      EP_DATA_DIR: /opt/enviPy/
      ALLOWED_HOSTS: 127.0.0.1,localhost
      DEBUG: True
      LOG_LEVEL: INFO
      MODEL_BUILDING_ENABLED: True
      APPLICABILITY_DOMAIN_ENABLED: True
      ENVIFORMER_PRESENT: True
      ENVIFORMER_DEVICE: cpu
      FLAG_CELERY_PRESENT: False
      PLUGINS_ENABLED: True
      SERVER_URL: http://localhost:8000
      ADMIN_APPROVAL_REQUIRED: True
      REGISTRATION_MANDATORY: True
      LOG_DIR: ''
      # DB
      POSTGRES_SERVICE_NAME: postgres
      POSTGRES_DB: ${{ vars.POSTGRES_DB }}
      POSTGRES_USER: ${{ vars.POSTGRES_USER }}
      POSTGRES_PASSWORD: ${{ secrets.POSTGRES_PASSWORD }}
      POSTGRES_PORT: 5432
      # SENTRY
      SENTRY_ENABLED: False
      # MS ENTRA
      MS_ENTRA_ENABLED: False

    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      # Use shared setup action - skips frontend builds for API-only tests
      - name: Setup enviPy Environment
        uses: ./.gitea/actions/setup-envipy
        with:
          skip-frontend: 'true'
          skip-playwright: 'false'
          ssh-private-key: ${{ secrets.ENVIPY_CI_PRIVATE_KEY }}
          run-migrations: 'true'

      - name: Run API tests
        run: |
          .venv/bin/python manage.py test epapi -v 2

      - name: Test API endpoints availability
        run: |
          .venv/bin/python manage.py runserver 0.0.0.0:8000 &
          SERVER_PID=$!
          sleep 5
          curl -f http://localhost:8000/api/v1/docs || echo "API docs not available"
          kill $SERVER_PID
