name: Build Docker Image

on:
  push:
    branches:
      - main
    tags:
      - '*'

env:
  GITEA_REGISTRY: ${{ gitea.server_url }}
  GITEA_USERNAME: ${{ gitea.actor }}

jobs:
  build:
    runs-on: ubuntu-latest
    
    steps:
      - name: Checkout code
        uses: actions/checkout@v4
      
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3
      
      - name: Determine image tag
        id: tag
        run: |
          if [[ "${{ github.ref }}" == refs/tags/* ]]; then
            TAG=${GITHUB_REF#refs/tags/}
          elif [[ "${{ github.ref }}" == "refs/heads/main" ]]; then
            TAG=main
          else
            echo "Not on main branch or a tag, skipping build"
            exit 1
          fi
          echo "tag=$TAG" >> $GITHUB_OUTPUT
          
          # Remove protocol from registry URL
          REGISTRY="${{ env.GITEA_REGISTRY }}"
          REGISTRY="${REGISTRY#https://}"
          REGISTRY="${REGISTRY#http://}"
          echo "registry=$REGISTRY" >> $GITHUB_OUTPUT
          
          # Lowercase repository name
          REPO="${{ gitea.repository }}"
          REPO="${REPO,,}"
          echo "repository=$REPO" >> $GITHUB_OUTPUT
      
      - name: Login to Gitea Container Registry
        uses: docker/login-action@v3
        with:
          registry: ${{ steps.tag.outputs.registry }}
          username: ${{ vars.REGISTRY_USERNAME }}
          password: ${{ secrets.REGISTRY_TOKEN }}
      
      - name: Build and push Docker image
        uses: docker/build-push-action@v5
        with:
          context: .
          file: ./Dockerfile
          push: true
          tags: |
            ${{ steps.tag.outputs.registry }}/${{ steps.tag.outputs.repository }}:${{ steps.tag.outputs.tag }}
            ${{ steps.tag.outputs.registry }}/${{ steps.tag.outputs.repository }}:latest
      
      - name: Call deployment webhook
        if: ${{ secrets.DEPLOYMENT_WEBHOOK != '' }}
        run: |
          curl -k -X POST ${{ secrets.DEPLOYMENT_WEBHOOK }} \
            -H 'Content-Type: application/json'
