name: Release
run-name: "Making Release"
on:
  push:
    tags:
      - 'v*.*.*'

jobs:
  build-and-release:
    name: Build and Release
    runs-on: ubuntu-latest

    steps:
    - name: Checkout code
      uses: actions/checkout@v4
      with:
        fetch-depth: 0

    - name: Set up Go
      uses: actions/setup-go@v5
      with:
        go-version: '1.23'

    - name: Get version from tag
      id: get_version
      run: |
        echo "VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT
        echo "Version: ${GITHUB_REF#refs/tags/}"

    - name: Build binaries for multiple platforms
      run: |
        mkdir -p dist

        # Build Server
        # Linux AMD64
        GOOS=linux GOARCH=amd64 go build -o dist/whatshook-server-linux-amd64 -ldflags "-X main.version=${{ steps.get_version.outputs.VERSION }}" ./cmd/server

        # Linux ARM64
        GOOS=linux GOARCH=arm64 go build -o dist/whatshook-server-linux-arm64 -ldflags "-X main.version=${{ steps.get_version.outputs.VERSION }}" ./cmd/server

        # macOS AMD64
        GOOS=darwin GOARCH=amd64 go build -o dist/whatshook-server-darwin-amd64 -ldflags "-X main.version=${{ steps.get_version.outputs.VERSION }}" ./cmd/server

        # macOS ARM64 (Apple Silicon)
        GOOS=darwin GOARCH=arm64 go build -o dist/whatshook-server-darwin-arm64 -ldflags "-X main.version=${{ steps.get_version.outputs.VERSION }}" ./cmd/server

        # Windows AMD64
        GOOS=windows GOARCH=amd64 go build -o dist/whatshook-server-windows-amd64.exe -ldflags "-X main.version=${{ steps.get_version.outputs.VERSION }}" ./cmd/server

        # Build CLI
        # Linux AMD64
        GOOS=linux GOARCH=amd64 go build -o dist/whatshook-cli-linux-amd64 -ldflags "-X main.version=${{ steps.get_version.outputs.VERSION }}" ./cmd/cli

        # Linux ARM64
        GOOS=linux GOARCH=arm64 go build -o dist/whatshook-cli-linux-arm64 -ldflags "-X main.version=${{ steps.get_version.outputs.VERSION }}" ./cmd/cli

        # macOS AMD64
        GOOS=darwin GOARCH=amd64 go build -o dist/whatshook-cli-darwin-amd64 -ldflags "-X main.version=${{ steps.get_version.outputs.VERSION }}" ./cmd/cli

        # macOS ARM64 (Apple Silicon)
        GOOS=darwin GOARCH=arm64 go build -o dist/whatshook-cli-darwin-arm64 -ldflags "-X main.version=${{ steps.get_version.outputs.VERSION }}" ./cmd/cli

        # Windows AMD64
        GOOS=windows GOARCH=amd64 go build -o dist/whatshook-cli-windows-amd64.exe -ldflags "-X main.version=${{ steps.get_version.outputs.VERSION }}" ./cmd/cli

        # Create checksums
        cd dist
        sha256sum * > checksums.txt
        cd ..

    - name: Generate release notes
      id: release_notes
      run: |
        # Get the previous tag
        previous_tag=$(git describe --tags --abbrev=0 HEAD^ 2>/dev/null || echo "")

        if [ -z "$previous_tag" ]; then
          # No previous tag, get all commits
          commits=$(git log --pretty=format:"- %s (%h)" --no-merges)
        else
          # Get commits since the previous tag
          commits=$(git log "${previous_tag}..HEAD" --pretty=format:"- %s (%h)" --no-merges)
        fi

        # Create release notes
        cat > release_notes.md << EOF
        # Release ${{ steps.get_version.outputs.VERSION }}

        ## Changes

        ${commits}

        ## Installation

        WhatsHooked provides two binaries:
        - **Server**: The WhatsApp webhook server
        - **CLI**: Command-line interface for managing the server

        Download the appropriate binaries for your platform:

        ### Server
        - **Linux (AMD64)**: \`whatshook-server-linux-amd64\`
        - **Linux (ARM64)**: \`whatshook-server-linux-arm64\`
        - **macOS (Intel)**: \`whatshook-server-darwin-amd64\`
        - **macOS (Apple Silicon)**: \`whatshook-server-darwin-arm64\`
        - **Windows (AMD64)**: \`whatshook-server-windows-amd64.exe\`

        ### CLI
        - **Linux (AMD64)**: \`whatshook-cli-linux-amd64\`
        - **Linux (ARM64)**: \`whatshook-cli-linux-arm64\`
        - **macOS (Intel)**: \`whatshook-cli-darwin-amd64\`
        - **macOS (Apple Silicon)**: \`whatshook-cli-darwin-arm64\`
        - **Windows (AMD64)**: \`whatshook-cli-windows-amd64.exe\`

        Make the binaries executable (Linux/macOS):
        \`\`\`bash
        chmod +x whatshook-*
        \`\`\`

        Verify downloads with the provided checksums.
        EOF

    - name: Create Release
      uses: softprops/action-gh-release@v1
      with:
        body_path: release_notes.md
        files: |
          dist/whatshook-server-linux-amd64
          dist/whatshook-server-linux-arm64
          dist/whatshook-server-darwin-amd64
          dist/whatshook-server-darwin-arm64
          dist/whatshook-server-windows-amd64.exe
          dist/whatshook-cli-linux-amd64
          dist/whatshook-cli-linux-arm64
          dist/whatshook-cli-darwin-amd64
          dist/whatshook-cli-darwin-arm64
          dist/whatshook-cli-windows-amd64.exe
          dist/checksums.txt
        draft: false
        prerelease: false
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

    - name: Summary
      run: |
        echo "Release ${{ steps.get_version.outputs.VERSION }} created successfully!"
        echo "Binaries built for:"
        echo "  - Linux (amd64, arm64)"
        echo "  - macOS (amd64, arm64)"
        echo "  - Windows (amd64)"
