name: Build Windows


on:
  push:
    branches: [ master, main ]
  pull_request:
    branches: [ master, main ]
  workflow_dispatch:

env:
  GODOT_VERSION: 4.4.1
  EXPORT_NAME: PNGTuber-Plus

jobs:
  export-windows:
    name: Windows Export
    runs-on: self-hosted
    steps:
      - name: Checkout
        uses: actions/checkout@v4
        with:
          lfs: true
      
      - name: Debug Environment
        run: |
          Write-Host "Current directory: $(Get-Location)"
          Write-Host "Godot executable exists: $(Test-Path 'D:\Godot\Godot_v4.4.1-stable_win64.exe')"
          Write-Host "Export name: $env:EXPORT_NAME"
          Write-Host "Project file exists: $(Test-Path 'project.godot')"
          Get-ChildItem -Path . -Filter "*.cfg" | Select-Object Name

      - name: Cache Export Templates
        uses: actions/cache@v4
        id: cache-templates
        with:
          path: C:\WINDOWS\ServiceProfiles\NetworkService\AppData\Roaming\Godot\export_templates\4.4.1.stable
          key: godot-templates-4.4.1-stable-v1

      - name: Setup Export Templates and Tools
        if: steps.cache-templates.outputs.cache-hit != 'true'
        run: |
          # Setup export templates
          $templateDir = "C:\WINDOWS\ServiceProfiles\NetworkService\AppData\Roaming\Godot\export_templates\4.4.1.stable"
          Write-Host "Creating export template directory..."
          New-Item -ItemType Directory -Force -Path $templateDir
          
          Write-Host "Downloading export templates..."
          Invoke-WebRequest -Uri "https://github.com/godotengine/godot/releases/download/4.4.1-stable/Godot_v4.4.1-stable_export_templates.tpz" -OutFile "templates.tpz"
          
          Write-Host "Renaming .tpz to .zip for extraction..."
          Rename-Item "templates.tpz" "templates.zip"
          
          Write-Host "Extracting templates..."
          Expand-Archive -Path "templates.zip" -DestinationPath "temp_templates" -Force
          
          Write-Host "Copying templates to correct location..."
          Copy-Item -Path "temp_templates\templates\*" -Destination $templateDir -Recurse -Force
          
          Write-Host "Cleaning up..."
          Remove-Item -Path "temp_templates" -Recurse -Force
          Remove-Item -Path "templates.zip" -Force
          
          Write-Host "Export templates installed to: $templateDir"

      - name: Verify Templates
        run: |
          $templateDir = "C:\WINDOWS\ServiceProfiles\NetworkService\AppData\Roaming\Godot\export_templates\4.4.1.stable"
          Write-Host "Checking for export templates at: $templateDir"
          if (Test-Path $templateDir) {
            Write-Host "Export templates found. Contents:"
            Get-ChildItem -Path $templateDir | Select-Object Name, Length | Format-Table
          } else {
            Write-Host "ERROR: Export templates not found!"
            exit 1
          }
          
          # Check if rcedit is available (it's already in the project)
          Write-Host "Checking for rcedit..."
          if (Test-Path "rcedit-x64.exe") {
            Write-Host "rcedit found in project directory"
          } else {
            Write-Host "rcedit not found - downloading..."
            Invoke-WebRequest -Uri "https://github.com/electron/rcedit/releases/latest/download/rcedit-x64.exe" -OutFile "rcedit-x64.exe"
            Write-Host "rcedit downloaded"
          }

      - name: Windows Build
        run: .\build-windows-ci.bat
        shell: cmd

      - name: Check Build Output
        run: |
          Write-Host "Build directory contents:"
          if (Test-Path "build\windows") {
            Get-ChildItem -Path "build\windows" -Recurse | Select-Object Name, Length
          } else {
            Write-Host "Build directory does not exist!"
          }
          
          if (Test-Path "build\windows\PNGTuber-Plus.exe") {
            Write-Host "Build SUCCESS: PNGTuber-Plus.exe created"
            $fileSize = (Get-Item "build\windows\PNGTuber-Plus.exe").Length
            Write-Host "File size: $fileSize bytes"
          } else {
            Write-Host "Build FAILED: PNGTuber-Plus.exe not found"
            exit 1
          }
      
      - name: Upload Windows Build
        uses: actions/upload-artifact@v4
        with:
          name: windows-build
          path: build/windows/
          retention-days: 14

  release:
    name: Create Release
    needs: export-windows
    runs-on: self-hosted
    if: github.ref == 'refs/heads/master' && github.event_name == 'push' && success()
    steps:
      - name: Download Windows Build
        uses: actions/download-artifact@v4
        with:
          name: windows-build
          path: ./windows/
      
      - name: Create Release
        id: create_release
        uses: actions/create-release@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          tag_name: build-${{ github.sha }}
          release_name: PNGTuber Plus Build ${{ github.sha }}
          body: |
            Automated build of PNGTuber Plus
            
            ## Recent Updates by Litruv
            - **StreamDeck Integration**: Add buttons to enable the streamdeck plugin that was built in
            - **Rotation Wobble**: New sprite rotation effects with frequency and amplitude controls  
            - **Enhanced Modifier Keys**: Support for complex key combinations (Ctrl+Shift+Alt+Cmd)
            - **Godot 4.4.1 Support**: Updated for latest Godot stable release
            
            ## Installation
            1. Download PNGTuber-Plus.exe from the assets below
            2. Run the executable - no installation required!
            3. For StreamDeck integration, download the plugin from [here](https://github.com/BoyneGames/streamdeck-godot-plugin/releases/tag/1.0.0)
          draft: false
          prerelease: false
      
      - name: Upload Windows Release Asset
        uses: actions/upload-release-asset@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          upload_url: ${{ steps.create_release.outputs.upload_url }}
          asset_path: ./windows/PNGTuber-Plus.exe
          asset_name: PNGTuber-Plus.exe
          asset_content_type: application/octet-stream
