name: Gitea Release

on:
  workflow_call:
    inputs:
      gitea_ref_name:
        required: true
        type: string
      gitea_server_url:
        required: true
        type: string
      gitea_repository:
        required: true
        type: string
    secrets:
      GITEA_TOKEN:
        required: true

jobs:
  create-release:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4
    
    - name: Set up Python
      uses: actions/setup-python@v4
      with:
        python-version: '3.x'
    
    - name: Install PlatformIO
      run: |
        python -m pip install --upgrade pip
        pip install --upgrade platformio esptool
    
    - name: Install xxd
      run: |
        sudo apt-get update
        sudo apt-get install xxd
    
    - name: Build Firmware
      run: |
        pio run -e esp32dev -t buildfs  # Build SPIFFS
        pio run -e esp32dev            # Build firmware
        cp .pio/build/esp32dev/firmware.bin .pio/build/esp32dev/filaman.bin
        cp .pio/build/esp32dev/spiffs.bin .pio/build/esp32dev/filaman_spiffs.bin
        
    - name: Prepare binaries
      run: |
        cd .pio/build/esp32dev
        
        # Create OTA binary (already has correct magic byte)
        cp firmware.bin filaman.bin
        
        # Create a magic byte prepended binary for the bootloader
        echo -ne '\xE9' > bootloader_with_magic.bin
        cat bootloader.bin >> bootloader_with_magic.bin
        
        echo "Creating full binary with magic byte..."
        esptool.py --chip esp32 merge_bin \
          --fill-flash-size 4MB \
          --flash_mode dio \
          --flash_freq 40m \
          --flash_size 4MB \
          -o filaman.bin \
          0x0000 bootloader_with_magic.bin \
          0x8000 partitions.bin \
          0x10000 firmware.bin \
          0x390000 spiffs.bin
        
        # Verify magic bytes
        echo "Checking magic bytes:"
        echo "Full binary first bytes:"
        xxd -l 16 filaman.bin
        
        # Verify file sizes
        echo "File sizes:"
        ls -lh *.bin
        
    - name: Create Release
      env:
        TOKEN: ${{ secrets.GITEA_TOKEN }}
      run: |
        TAG="${{ inputs.gitea_ref_name }}"
        API_URL="${{ inputs.gitea_server_url }}/api/v1"
        REPO="${{ inputs.gitea_repository }}"
        
        # Create release
        RESPONSE=$(curl -k -s \
          -X POST \
          -H "Authorization: token ${TOKEN}" \
          -H "Content-Type: application/json" \
          -d "{
            \"tag_name\":\"${TAG}\",
            \"name\":\"Release ${TAG}\",
            \"body\":\"${{ steps.changelog.outputs.CHANGES }}\"
          }" \
          "${API_URL}/repos/${REPO}/releases")
        
        RELEASE_ID=$(echo "$RESPONSE" | grep -o '"id":[0-9]*' | cut -d':' -f2 | head -n1)
        
        if [ -n "$RELEASE_ID" ]; then
          echo "Release created with ID: $RELEASE_ID"
          
          # Upload binaries
          cd .pio/build/esp32dev
          for file in filaman.bin; do
            echo "Uploading $file..."
            curl -k -s \
              -X POST \
              -H "Authorization: token ${TOKEN}" \
              -H "Content-Type: application/octet-stream" \
              --data-binary "@$file" \
              "${API_URL}/repos/${REPO}/releases/${RELEASE_ID}/assets?name=$file"
          done
        else
          echo "Failed to create release. Response:"
          echo "$RESPONSE"
          exit 1
        fi