name: Build Luncher for Windows/AMD64/Nightly

on:
  workflow_dispatch: {}
  schedule:
    - cron: "0 0 * * *"

jobs:
  build-windows:
    runs-on: win-10

    steps:
      - name: Check rsrc tool
        shell: bash
        run: |
          rsrc --version || echo "rsrc tool not available"

      - name: Check windres availability
        shell: bash
        run: |
          windres --version || echo "windres not available, please install mingw"

      - name: Check ImageMagick version
        shell: powershell
        run: |
          magick -version

      - name: Clone Publisher repo and Generate Manifest Files
        shell: bash
        run: |
          git clone https://weforge.xyz/Spitfire/Publisher.git
          cd Publisher
          # Run win_manifest_gen.go to generate manifest files.
          go run win_manifest_gen.go \
            --name "Spitfire Luncher" \
            --company "Spitfire Browser" \
            --description "Official Luncher for Spitfire Browser" \
            --official "https://spitfirebrowser.xyz" \
            --dev "https://weforge.xyz" \
            --requireAdmin=false
          # Copy generated files (app.manifest and app.rc) to the workspace root.
          cp app.manifest ../
          cp app.rc ../
          cd ..

      - name: Clone Luncher, Convert Icon, and Build Spitfire Luncher
        shell: bash
        run: |
          set -e
          git clone https://weforge.xyz/Spitfire/Luncher.git
          cd Luncher
          # Copy the generated manifest files from the workspace root.
          cp ../app.manifest .
          cp ../app.rc .
          # Download the icon PNG (530x530) from the dynamic URL.
          curl -fL "https://weforge.xyz/Spitfire/Branding/raw/branch/main/active/browser/icon.png?raw=true" -o icon.png
          ls -l icon.png
          head -n 10 icon.png || true
          # Convert the PNG to a Windows ICO file with multiple sizes using ImageMagick.
          magick icon.png -define icon:auto-resize=256,128,64,48,32,16 icon.ico
          # Prepend an ICON directive to app.rc so the icon is embedded.
          echo '1 ICON "icon.ico"' | cat - app.rc > tmp.rc && mv tmp.rc app.rc
          # Compile the resource script into a .syso file using windres.
          windres app.rc -O coff -o resource.syso
          # Build the Luncher executable; resource.syso is automatically linked.
          CGO_ENABLED=1 CC=x86_64-w64-mingw32-gcc GOOS=windows GOARCH=amd64 go build -ldflags "-s -w" -o spitfire-luncher.exe
          # Move the built executable one level up for packaging.
          mv spitfire-luncher.exe ..
          cd ..

      - name: Setup SSH Key for SourceForge
        shell: bash
        env:
          SF_SSH_KEY: ${{ secrets.SF_SSH_KEY }}
        run: |
          echo "$SF_SSH_KEY" | sed 's/\\n/\n/g' | tr -d '\r' > sf_key
          chmod 600 sf_key

      - name: Download existing APPINDEX
        shell: bash
        env:
          SF_USER: ${{ secrets.SF_USER }}
        run: |
          scp -i sf_key -o IdentitiesOnly=yes "$SF_USER@frs.sourceforge.net:/home/frs/project/spitfire-browser/APPINDEX" APPINDEX || true
      
      - name: Download logo image for luncher (with temporary link)
        shell: bash
        run: |
          mkdir -p spm
          curl -L -o spm/logo.png "https://weforge.xyz/Spitfire/Branding/raw/commit/f1a70addd443f91b98bea8ff9cc924af1ac67600/logo6-only-plane.png"

      - name: Compress artifact
        shell: bash
        run: |
          tar -czf spitfire-luncher-amd64-nightly-windows.tar.gz spitfire-luncher.exe spm/logo.png
          ls -l

      - name: Prepare luncher folder structure and move artifact
        shell: bash
        run: |
          DATE=$(date +'%Y.%m.%d')
          mkdir -p upload/luncher/amd64/nightly/$DATE
          mv spitfire-luncher-amd64-nightly-windows.tar.gz upload/luncher/amd64/nightly/$DATE/
          echo "$DATE" > date.txt

      - name: Upload luncher artifact to SourceForge
        shell: bash
        env:
          SF_USER: ${{ secrets.SF_USER }}
        run: |
          DATE=$(cat date.txt)
          scp -r -i sf_key -o IdentitiesOnly=yes upload/luncher "$SF_USER@frs.sourceforge.net:/home/frs/project/spitfire-browser/"

      - name: Update APPINDEX for Luncher
        shell: bash
        run: |
          DATE=$(cat date.txt)
          cd Publisher
          cp ../APPINDEX . || true
          go run update_appindex.go \
            --name "spitfire-luncher" \
            --release "nightly" \
            --version "$DATE" \
            --arch "amd64" \
            --description "Nightly build" \
            --url "https://spitfirebrowser.xyz/" \
            --license "AGPL-3.0" \
            --origin "luncher" \
            --maintainer "Internet Addict" \
            --dependencies "" \
            --platform "windows" \
            --icon "https://weforge.xyz/Spitfire/Branding/raw/branch/main/active/browser/icon.svg" \
            --screenshots "https://spitfirebrowser.xyz/static/images/screenshots/1.png" \
            --tags "browser,experimental,testing" \
            --notes "Automated build of Spitfire" \
            --remotePath "luncher/amd64/nightly/$DATE/spitfire-luncher-amd64-nightly-windows.tar.gz" \
            --compressedFile "spitfire-luncher-amd64-nightly-windows.tar.gz" \
            --uncompressedFile "spitfire-luncher.exe"
          cp APPINDEX ../

      - name: Upload updated APPINDEX for Luncher
        shell: bash
        env:
          SF_USER: ${{ secrets.SF_USER }}
        run: |
          scp -i sf_key -o IdentitiesOnly=yes APPINDEX "$SF_USER@frs.sourceforge.net:/home/frs/project/spitfire-browser/APPINDEX"

      - name: Cleanup SSH Key
        if: always()
        shell: bash
        run: |
          rm -f sf_key