# name: Unreal Engine Build

# on:
#   push:
#     branches: [ main, develop ]

# jobs:
#   windows-build:
#     runs-on: windows
#     steps:
#       - name: Checkout repository
#         uses: actions/checkout@v3
#         with:
#           lfs: true
#           fetch-depth: 0
      
#       - name: Set Unreal Engine Path
#         run: |
#           echo "UE_ROOT=F:\LuckyRobots\LuckyRobots\Engine" >> $Env:GITHUB_ENV
#           echo "DOTNET_CLI_HOME=$env:TEMP" >> $Env:GITHUB_ENV
#           echo "MSBUILDDISABLENODEREUSE=1" >> $Env:GITHUB_ENV
#           echo "DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1" >> $Env:GITHUB_ENV
#           echo "DOTNET_CLI_TELEMETRY_OPTOUT=1" >> $Env:GITHUB_ENV
#           echo "DOTNET_BUILD_OUTPUT_DIR=$env:TEMP\dotnet-build" >> $Env:GITHUB_ENV
        
#       - name: Set up build environment
#         run: |
#           # Create a custom build output directory in temp
#           $buildRoot = Join-Path $env:TEMP "unreal-build"
#           $dotnetBuildDir = Join-Path $buildRoot "dotnet-build"
#           $buildOutputDir = Join-Path $buildRoot "output"
          
#           # Create directories with full permissions
#           foreach ($dir in @($buildRoot, $dotnetBuildDir, $buildOutputDir)) {
#             New-Item -ItemType Directory -Force -Path $dir
#             icacls $dir /grant Everyone:F /T
#           }
          
#           # Set environment variables for build paths
#           echo "DOTNET_BUILD_OUTPUT_DIR=$dotnetBuildDir" >> $Env:GITHUB_ENV
#           echo "DOTNET_CLI_HOME=$dotnetBuildDir" >> $Env:GITHUB_ENV
#           echo "DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1" >> $Env:GITHUB_ENV
#           echo "DOTNET_CLI_TELEMETRY_OPTOUT=1" >> $Env:GITHUB_ENV
#           echo "DOTNET_USE_POLLING_FILE_WATCHER=true" >> $Env:GITHUB_ENV
#           echo "MSBUILDDISABLENODEREUSE=1" >> $Env:GITHUB_ENV
#           echo "MSBuildSDKsPath=$env:UE_ROOT\Binaries\ThirdParty\DotNet\8.0.300\win-x64\sdk\8.0.300\Sdks" >> $Env:GITHUB_ENV
          
#           # Clean any existing build artifacts
#           Remove-Item -Path "$dotnetBuildDir\*" -Recurse -Force -ErrorAction SilentlyContinue
#           Remove-Item -Path "$buildOutputDir\*" -Recurse -Force -ErrorAction SilentlyContinue
          
#           # Set up global.json to use the correct SDK version
#           $globalJson = @'
#           {
#             "sdk": {
#               "version": "8.0.300",
#               "rollForward": "latestFeature"
#             }
#           }
#           '@
#           Set-Content -Path "global.json" -Value $globalJson
          
#           # Create Directory.Build.props to redirect all outputs
#           $buildPropsContent = @'
#           <?xml version="1.0" encoding="utf-8"?>
#           <Project>
#             <PropertyGroup>
#               <BaseIntermediateOutputPath>$(DOTNET_BUILD_OUTPUT_DIR)\obj\$(MSBuildProjectName)\</BaseIntermediateOutputPath>
#               <BaseOutputPath>$(DOTNET_BUILD_OUTPUT_DIR)\bin\$(MSBuildProjectName)\</BaseOutputPath>
#               <IntermediateOutputPath>$(BaseIntermediateOutputPath)</IntermediateOutputPath>
#               <OutputPath>$(BaseOutputPath)</OutputPath>
#               <AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
#               <AppendRuntimeIdentifierToOutputPath>false</AppendRuntimeIdentifierToOutputPath>
#               <GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles>
#               <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
#               <RestoreNoCache>true</RestoreNoCache>
#               <EnforceWritePermissions>false</EnforceWritePermissions>
#             </PropertyGroup>
#           </Project>
#           '@
#           Set-Content -Path "Directory.Build.props" -Value $buildPropsContent -Encoding UTF8

#           # Create a temporary nuget.config file to use a local package cache
#           $nugetConfig = @'
#           <?xml version="1.0" encoding="utf-8"?>
#           <configuration>
#             <config>
#               <add key="globalPackagesFolder" value="$(DOTNET_BUILD_OUTPUT_DIR)\packages" />
#             </config>
#           </configuration>
#           '@
#           Set-Content -Path "nuget.config" -Value $nugetConfig -Encoding UTF8
          
#           # Set MSBuild configuration to use the temp directory
#           $MSBuildPath = Join-Path $env:UE_ROOT "Binaries\ThirdParty\DotNet\8.0.300\win-x64\sdk\8.0.300"
#           $env:MSBuildExtensionsPath = $MSBuildPath
#           $env:MSBuildSDKsPath = Join-Path $MSBuildPath "Sdks"
#           echo "MSBuildExtensionsPath=$env:MSBuildExtensionsPath" >> $Env:GITHUB_ENV
#           echo "MSBuildSDKsPath=$env:MSBuildSDKsPath" >> $Env:GITHUB_ENV
#           echo "MSBUILD_EXE_PATH=$MSBuildPath\MSBuild.dll" >> $Env:GITHUB_ENV
        
#       - name: Locate .uproject file
#         run: |
#           $projectPath = Get-ChildItem -Path ".\" -Filter "*.uproject" -Recurse | Select-Object -First 1 -ExpandProperty FullName
#           if (-not $projectPath) {
#             Write-Error "No .uproject file found in repository"
#             exit 1
#           }
#           echo "UPROJECT_PATH=$projectPath" >> $Env:GITHUB_ENV
#           Write-Host "Found project file: $projectPath"

#       - name: Build Unreal Project
#         run: |
#           # Create and set permissions for build output directory
#           $buildOutputDir = Join-Path $env:TEMP "unreal-build\output"
#           New-Item -ItemType Directory -Force -Path $buildOutputDir
#           icacls $buildOutputDir /grant Everyone:F
          
#           # Register dotnet locally
#           $dotnetPath = Join-Path $env:UE_ROOT "Binaries\ThirdParty\DotNet\8.0.300\win-x64\dotnet.exe"
#           $env:PATH = "$env:UE_ROOT\Binaries\ThirdParty\DotNet\8.0.300\win-x64;$env:PATH"
          
#           # Make a local copy of the MSBuild directory with write permissions
#           $customMSBuildDir = Join-Path $env:TEMP "msbuild-custom"
#           New-Item -ItemType Directory -Force -Path $customMSBuildDir
#           Copy-Item -Path "$env:UE_ROOT\Binaries\ThirdParty\DotNet\8.0.300\win-x64\sdk\8.0.300\*" -Destination $customMSBuildDir -Recurse -Force
#           icacls $customMSBuildDir /grant Everyone:F /T
          
#           # Set environment variables for the custom MSBuild
#           $env:MSBuildExtensionsPath = $customMSBuildDir
#           $env:MSBuildSDKsPath = Join-Path $customMSBuildDir "Sdks"
          
#           # Run the build with environment variables 
#           $uatPath = Join-Path $env:UE_ROOT "Build\BatchFiles\RunUAT.bat"
#           $envVars = "set DOTNET_CLI_HOME=$env:DOTNET_CLI_HOME && " +
#                      "set DOTNET_BUILD_OUTPUT_DIR=$env:DOTNET_BUILD_OUTPUT_DIR && " +
#                      "set DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1 && " +
#                      "set DOTNET_CLI_TELEMETRY_OPTOUT=1 && " +
#                      "set DOTNET_USE_POLLING_FILE_WATCHER=true && " +
#                      "set MSBuildExtensionsPath=$env:MSBuildExtensionsPath && " +
#                      "set MSBuildSDKsPath=$env:MSBuildSDKsPath && " +
#                      "set MSBUILD_EXE_PATH=$env:MSBUILD_EXE_PATH && "
                     
#           # Find project file
#           $projectPath = Get-ChildItem -Path ".\" -Filter "*.uproject" -Recurse | Select-Object -First 1 -ExpandProperty FullName
#           if (-not $projectPath) {
#             Write-Error "No .uproject file found in repository"
#             exit 1
#           }
#           Write-Host "Using project file: $projectPath"
          
#           # Run UAT with full command
#           $cmdLine = "$envVars cmd.exe /c `"$uatPath`" BuildCookRun -project=`"$projectPath`" -noP4 -platform=Win64 -clientconfig=Development -cook -build -stage -pak -archive -archivedirectory=`"$buildOutputDir`""
#           Write-Host "Running command: $cmdLine"
#           Invoke-Expression $cmdLine

#       - name: Upload build artifacts
#         uses: actions/upload-artifact@v3
#         with:
#           name: windows-build
#           path: BuildOutput/
#           retention-days: 7

#   macos-build:
#     runs-on: macos
#     steps:
#       - name: Checkout repository
#         uses: actions/checkout@v3
#         with:
#           lfs: true
#           fetch-depth: 0
      
#       - name: Setup Unreal Engine
#         run: |
#           # Use the correct path where Unreal Engine is installed
#           UE_PATH="/Users/Shared/Epic Games/UE_5.5"
          
#           if [ ! -d "$UE_PATH" ]; then
#             echo "Error: Unreal Engine is not installed in the expected location"
#             echo "Please ensure Unreal Engine is installed at $UE_PATH"
#             exit 1
#           fi
          
#           # Set environment variable with the correct Engine path
#           echo "UE_ROOT=$UE_PATH/Engine" >> $GITHUB_ENV
#           echo "Using Unreal Engine 5.5"
      
#       - name: Build Unreal Project
#         run: |
#           # Debug information
#           echo "=== Environment Information ==="
#           echo "macOS Version:"
#           sw_vers
#           echo "Current working directory: $(pwd)"
#           ls -la  # List all files in current directory
          
#           echo "=== Unreal Engine Information ==="
#           ls -la "$UE_ROOT/Build/BatchFiles"
          
#           echo "=== Project Information ==="
#           # Detailed search for the project file
#           echo "Searching for .uproject files:"
#           find . -name "*.uproject" -type f
          
#           # Get the absolute path of the project file
#           UPROJECT_PATH=$(find . -name "*.uproject" -type f | head -1)
#           if [ -z "$UPROJECT_PATH" ]; then
#             echo "Error: Could not find .uproject file"
#             exit 1
#           fi
          
#           # Convert to absolute path and verify file exists
#           UPROJECT_ABSOLUTE_PATH=$(realpath "$UPROJECT_PATH")
#           echo "Project absolute path: $UPROJECT_ABSOLUTE_PATH"
          
#           if [ ! -f "$UPROJECT_ABSOLUTE_PATH" ]; then
#             echo "Error: Project file does not exist at: $UPROJECT_ABSOLUTE_PATH"
#             exit 1
#           fi
          
#           echo "Using Unreal Engine at: $UE_ROOT"
          
#           # Make the project file readable and executable
#           chmod 755 "$UPROJECT_ABSOLUTE_PATH"
          
#           # Run the build using absolute paths
#           chmod +x "$UE_ROOT/Build/BatchFiles/RunUAT.sh"
#           "$UE_ROOT/Build/BatchFiles/RunUAT.sh" BuildCookRun \
#             -project="$UPROJECT_ABSOLUTE_PATH" \
#             -noP4 \
#             -platform=Mac \
#             -clientconfig=Development \
#             -cook -build -stage -pak -archive \
#             -archivedirectory="$(pwd)/Build"
      
#       - name: Upload build artifacts
#         uses: actions/upload-artifact@v3
#         with:
#           name: macos-build
#           path: Build/
#           retention-days: 7