name: Build and Push Docker Image

on:
  workflow_dispatch:
    inputs:
      version:
        description: "Version to build (e.g., 1.8.0)"
        required: true
      build_type:
        description: "Build type"
        required: true
        default: "Development"
        type: choice
        options:
          - Development
          - Production

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v5
        with:
          fetch-depth: 1

      - name: Set up QEMU
        uses: docker/setup-qemu-action@v3
        with:
          platforms: linux/amd64,linux/arm64,linux/arm/v7

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

      - name: Determine tags
        id: tags
        run: |
          VERSION=${{ github.event.inputs.version }}
          BUILD_TYPE=${{ github.event.inputs.build_type }}

          TAGS=()
          ALL_TAGS=()

          if [ "$BUILD_TYPE" = "Production" ]; then
            TAGS+=("release-$VERSION" "latest")
            for tag in "${TAGS[@]}"; do
              ALL_TAGS+=("ghcr.io/lukegus/termix:$tag")
              ALL_TAGS+=("docker.io/bugattiguy527/termix:$tag")
            done
          else
            TAGS+=("dev-$VERSION")
            for tag in "${TAGS[@]}"; do
              ALL_TAGS+=("ghcr.io/lukegus/termix:$tag")
            done
          fi

          echo "ALL_TAGS=$(IFS=,; echo "${ALL_TAGS[*]}")" >> $GITHUB_ENV

      - name: Login to GHCR
        uses: docker/login-action@v3
        with:
          registry: ghcr.io
          username: lukegus
          password: ${{ secrets.GHCR_TOKEN }}

      - name: Login to Docker Hub (prod only)
        if: ${{ github.event.inputs.build_type == 'Production' }}
        uses: docker/login-action@v3
        with:
          username: bugattiguy527
          password: ${{ secrets.DOCKERHUB_TOKEN }}

      - name: Build and push multi-arch image
        uses: docker/build-push-action@v5
        with:
          context: .
          file: ./docker/Dockerfile
          push: true
          platforms: linux/amd64,linux/arm64,linux/arm/v7
          tags: ${{ env.ALL_TAGS }}
          build-args: |
            BUILDKIT_INLINE_CACHE=1
            BUILDKIT_CONTEXT_KEEP_GIT_DIR=1
          labels: |
            org.opencontainers.image.source=https://github.com/${{ github.repository }}
            org.opencontainers.image.revision=${{ github.sha }}
          outputs: type=registry,compression=zstd,compression-level=19

      - name: Cleanup Docker
        if: always()
        run: |
          docker image prune -af
          docker system prune -af --volumes
