name: GitHub Release

on:
  workflow_call:

jobs:
  create-release:
    runs-on: ubuntu-latest
    permissions:
      contents: write
    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
    
    - name: Build Firmware
      run: |
        pio run -t buildfs  # Build SPIFFS
        pio run            # Build firmware
        
    - name: Install esptool
      run: |
        pip install esptool
        
    - name: Merge firmware and SPIFFS
      run: |
        esptool.py --chip esp32 merge_bin \
          --flash_mode dio \
          --flash_freq 40m \
          --flash_size 4MB \
          -o .pio/build/esp32dev/filaman_full.bin \
          0x1000 .pio/build/esp32dev/bootloader.bin \
          0x8000 .pio/build/esp32dev/partitions.bin \
          0x10000 .pio/build/esp32dev/firmware.bin \
          0x3D0000 .pio/build/esp32dev/spiffs.bin

    - name: Prepare OTA firmware
      run: |
        cp .pio/build/esp32dev/firmware.bin .pio/build/esp32dev/filaman_ota.bin
    
    - name: Get version from tag
      id: get_version
      run: |
        echo "VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_OUTPUT
      
    - name: Read CHANGELOG.md
      id: changelog
      run: |
        VERSION=${{ steps.get_version.outputs.VERSION }}
        CHANGELOG=$(awk "/## \\[$VERSION\\]/{p=1;print;next} /## \\[/{p=0} p" CHANGELOG.md)
        echo "CHANGES<<EOF" >> $GITHUB_OUTPUT
        echo "$CHANGELOG" >> $GITHUB_OUTPUT
        echo "EOF" >> $GITHUB_OUTPUT

    - name: Create GitHub Release
      env:
        GH_TOKEN: ${{ github.token }}
      run: |
        gh release create "${{ github.ref_name }}" \
          --title "Release ${{ steps.get_version.outputs.VERSION }}" \
          --notes "${{ steps.changelog.outputs.CHANGES }}" \
          .pio/build/esp32dev/filaman_full.bin \
          .pio/build/esp32dev/filaman_ota.bin