name: Build Windows Release

on:
  push:
    tags:
      - 'v*'

env:
  PYTHON_VERSION: '3.12.10'

jobs:
  build-windows:
    runs-on: windows-latest
    
    steps:
    - name: Checkout code
      uses: actions/checkout@v4
      with:
        fetch-depth: 0
    
    - name: Extract version from tag
      id: get_version
      shell: powershell
      run: |
        $tag = "${{ github.ref_name }}"
        $version = $tag -replace '^v', ''
        Write-Host "Extracted version: $version"
        echo "VERSION=$version" >> $env:GITHUB_OUTPUT

    - name: Setup Python
      uses: actions/setup-python@v4
      with:
        python-version: ${{ env.PYTHON_VERSION }}

    - name: Cache Python dependencies
      uses: actions/cache@v3
      with:
        path: |
          venv
          ~\AppData\Local\pip\Cache
        key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
        restore-keys: |
          ${{ runner.os }}-pip-

    - name: Create virtual environment and install dependencies
      shell: powershell
      run: |
        python -m venv venv
        .\venv\Scripts\Activate.ps1
        python -m pip install --upgrade pip
        pip install --no-cache-dir -r requirements.txt
        pip install --no-cache-dir cx_Freeze
        pip install --no-cache-dir yt-dlp

    - name: Update version in setup files
      shell: powershell
      run: |
        $version = "${{ steps.get_version.outputs.VERSION }}"
        Write-Host "Updating version to: $version"
        
        # Update setup.py
        $setupContent = Get-Content "build/windows/setup.py" -Raw
        $setupContent = $setupContent -replace 'version\s*=\s*["\'][^"\']*["\']', "version='$version'"
        Set-Content "build/windows/setup.py" -Value $setupContent
        
        # Update setup-ffmpeg.py
        $setupFFmpegContent = Get-Content "build/windows/setup-ffmpeg.py" -Raw
        $setupFFmpegContent = $setupFFmpegContent -replace 'version\s*=\s*["\'][^"\']*["\']', "version='$version'"
        Set-Content "build/windows/setup-ffmpeg.py" -Value $setupFFmpegContent
        
        # Update build script
        $buildScript = Get-Content "build/windows/windows-build-universal.ps1" -Raw
        $buildScript = $buildScript -replace '\$SCRIPT_VERSION\s*=\s*["\'][^"\']*["\']', "`$SCRIPT_VERSION = '$version'"
        Set-Content "build/windows/windows-build-universal.ps1" -Value $buildScript
        
        Write-Host "Version updated in all files"
    
    - name: Build Standard Version (MSI + ZIP)
      shell: powershell
      run: |
        .\venv\Scripts\Activate.ps1
        Write-Host "Building Standard Version..."
        .\build\windows\windows-build-universal.ps1 -Verbose
    
    - name: Build FFmpeg Version (MSI + ZIP)
      shell: powershell
      run: |
        .\venv\Scripts\Activate.ps1
        Write-Host "Building FFmpeg Version..."
        .\build\windows\windows-build-universal.ps1 -FFmpeg -Verbose
    
    - name: Prepare release artifacts
      shell: powershell
      run: |
        $version = "${{ steps.get_version.outputs.VERSION }}"
        
        Write-Host "Preparing artifacts for version: $version"
        New-Item -ItemType Directory -Path "artifacts" -Force
        
        # Find and copy standard build artifacts
        $standardMsi = Get-ChildItem -Path "releases" -Filter "YTSage-v$version.msi" -Recurse | Select-Object -First 1
        if ($standardMsi) {
          Copy-Item $standardMsi.FullName "artifacts\YTSage-v$version.msi"
          Write-Host "Copied: $($standardMsi.Name) -> YTSage-v$version.msi"
        }
        
        $standardZip = Get-ChildItem -Path "releases" -Filter "YTSage-v$version.zip" -Recurse | Select-Object -First 1
        if ($standardZip) {
          Copy-Item $standardZip.FullName "artifacts\YTSage-v$version.zip"
          Write-Host "Copied: $($standardZip.Name) -> YTSage-v$version.zip"
        }
        
        # Find and copy FFmpeg build artifacts
        $ffmpegMsi = Get-ChildItem -Path "releases" -Filter "YTSage-v$version-ffmpeg.msi" -Recurse | Select-Object -First 1
        if ($ffmpegMsi) {
          Copy-Item $ffmpegMsi.FullName "artifacts\YTSage-v$version-ffmpeg.msi"
          Write-Host "Copied: $($ffmpegMsi.Name) -> YTSage-v$version-ffmpeg.msi"
        }
        
        $ffmpegZip = Get-ChildItem -Path "releases" -Filter "YTSage-v$version-ffmpeg.zip" -Recurse | Select-Object -First 1
        if ($ffmpegZip) {
          Copy-Item $ffmpegZip.FullName "artifacts\YTSage-v$version-ffmpeg.zip"
          Write-Host "Copied: $($ffmpegZip.Name) -> YTSage-v$version-ffmpeg.zip"
        }
        
        # List all artifacts
        Write-Host "Final artifacts:"
        Get-ChildItem artifacts | ForEach-Object { Write-Host "  $($_.Name)" }

    - name: Create draft release
      uses: softprops/action-gh-release@v1
      with:
        tag_name: ${{ github.ref_name }}
        name: YTSage ${{ github.ref_name }}
        draft: true
        prerelease: false
        body: |
          # YTSage ${{ github.ref_name }}
          
          **Release Date**: ${{ github.event.head_commit.timestamp }}
          
          ## Downloads
          
          ### Standard Version
          - **YTSage-v${{ steps.get_version.outputs.VERSION }}.msi** - Windows Installer (Recommended)
          - **YTSage-v${{ steps.get_version.outputs.VERSION }}.zip** - Portable ZIP (No installation required)
          
          ### FFmpeg Bundle Version
          - **YTSage-v${{ steps.get_version.outputs.VERSION }}-ffmpeg.msi** - Windows Installer with FFmpeg included
          - **YTSage-v${{ steps.get_version.outputs.VERSION }}-ffmpeg.zip** - Portable ZIP with FFmpeg included
          
          ## Installation Instructions
          
          ### MSI Installer
          1. Download the `.msi` file
          2. Double-click to run the installer
          3. Follow the installation wizard
          4. YTSage will be available in your Start Menu
          
          ### Portable ZIP
          1. Download the `.zip` file
          2. Extract to your preferred location
          3. Run `YTSage.exe`
          
          ## System Requirements
          
          - Windows 10/11 (64-bit)
          - .NET Framework (usually pre-installed)
          - Internet connection for yt-dlp updates
          
          ## Notes
          
          - Standard version: Downloads FFmpeg automatically when needed
          - FFmpeg bundle: Includes FFmpeg binaries for offline use
          
          ---
          
          **Full Changelog**: https://github.com/${{ github.repository }}/compare/${{ github.ref_name }}
        files: |
          artifacts/YTSage-v${{ steps.get_version.outputs.VERSION }}.msi
          artifacts/YTSage-v${{ steps.get_version.outputs.VERSION }}.zip
          artifacts/YTSage-v${{ steps.get_version.outputs.VERSION }}-ffmpeg.msi
          artifacts/YTSage-v${{ steps.get_version.outputs.VERSION }}-ffmpeg.zip
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}