name: Build and Test - Staging
on:
  pull_request:
    types: [ opened, synchronize, reopened ]

jobs:
  determine_version:
    runs-on: ubuntu-latest
    outputs:
      repo_name: ${{ steps.project_metadata.outputs.REPO_NAME }}
      repo_version_hash: ${{ steps.project_metadata.outputs.REPO_VERSION_HASH }}
      project_version: ${{ steps.project_metadata.outputs.PROJECT_VERSION }}
    steps:
      - name: Checkout Repository
        uses: actions/checkout@v4

      - name: Setup Node Environment
        uses: actions/setup-node@v4

      - name: Acquire Project Metadata
        id: project_metadata
        run: |
          echo REPO_NAME=$(echo ${GITHUB_REPOSITORY} | awk -F"/" '{print $2}') >> $GITHUB_OUTPUT
          echo REPO_VERSION_HASH=$(git describe --tags --always | sed 's/^v//') >> $GITHUB_OUTPUT
          echo PROJECT_VERSION=$(npm pkg get version --workspaces=false | tr -d \") >> $GITHUB_OUTPUT

  build_and_push:
    runs-on: ubuntu-latest
    needs: determine_version
    steps:
      - name: Checkout caperren-com Repository
        uses: actions/checkout@v4
        with:
          path: caperren-com

      - name: Login to Docker Registry
        uses: docker/login-action@v3
        with:
          registry: gitea.perren.cloud
          username: ${{ secrets.REGISTRY_USERNAME }}
          password: ${{ secrets.ACTIONS_TOKEN }}

      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3

      - name: Build and Push
        uses: docker/build-push-action@v5
        with:
          context: caperren-com
          push: true
          tags: |
            gitea.perren.cloud/caperren/caperren-com:latest-staging
          build-args: |
            REPO_VERSION_HASH=${{ needs.determine_version.outputs.repo_version_hash }}
            PROJECT_VERSION=${{ needs.determine_version.outputs.project_version }}
            BUILD_ENVIRONMENT=staging

  test:
    runs-on: ubuntu-latest
    needs: build_and_push
    steps:
      - run: echo "Placeholder"

  deploy_staging:
    runs-on: ubuntu-latest
    needs: test
    steps:
      - name: Pull New Image For App
        run: |
          curl -k -X 'POST' \
            'https://caperren.com:444/api/v2.0/app/pull_images' \
            -H 'accept: */*' \
            -H 'Authorization: Bearer ${{ secrets.TRUENAS_CAPERRENCOM_API_KEY }}' \
            -H 'Content-Type: application/json' \
            -d '{
            "name": "caperren-com-stg",
            "options": {}
          }'

      - name: Stop App
        run: |
          curl -k -X 'POST' \
            'https://caperren.com:444/api/v2.0/app/stop' \
            -H 'accept: */*' \
            -H 'Authorization: Bearer ${{ secrets.TRUENAS_CAPERRENCOM_API_KEY }}' \
            -H 'Content-Type: application/json' \
            -d '"caperren-com-stg"'
      - name: Start App
        run: |
          curl -k -X 'POST' \
            'https://caperren.com:444/api/v2.0/app/start' \
            -H 'accept: */*' \
            -H 'Authorization: Bearer ${{ secrets.TRUENAS_CAPERRENCOM_API_KEY }}' \
            -H 'Content-Type: application/json' \
            -d '"caperren-com-stg"'