# Start_Windows - WebServer.ps1
# Run this script with:
#   Set-ExecutionPolicy Unrestricted -Scope Process; .\Start_Windows -WebServer.ps1

Write-Output " =============================== "
Write-Output " Re-Building ReactJS App         "
Write-Output " =============================== "

# --- Define paths ---
$venvFolder       = "Borealis-Workflow-Automation-Tool"          # Virtual environment root.
$dataSource       = "Data"                                       # Contains server.py and optionally WebUI.
$dataDestination  = "$venvFolder\Borealis"                       # Data folder copy destination in the venv.
$customUIPath     = "$dataSource\WebUI"                          # Custom UI folder source in the project root.
$webUIDestination = "$venvFolder\web-interface"                  # Destination for the React UI in the venv.

# If a custom UI folder exists at <ProjectRoot>\Data\WebUI, copy its contents over (overwrite defaults).
if (Test-Path $customUIPath) {
    Write-Output "Borealis ReactJS Data Found at '$customUIPath'. Overwriting ReactJS App Files..."
    Copy-Item -Path "$customUIPath\*" -Destination $webUIDestination -Recurse -Force
} else {
    Write-Output "No custom UI folder found at '$customUIPath'. Using default ReactJS app."
}

# --- Activate virtual environment ---
Write-Output "Activating Virtual Python Environment..."
. "$venvFolder\Scripts\Activate"

# --- Remove Existing / Previous ReactJS App Build folder ---
if (Test-Path $dataDestination) {
    Remove-Item -Recurse -Force $venvFolder\web-interface\build
}

# --- Build the React (UI) app in the web-interface folder if needed ---
$packageJsonPath = Join-Path $webUIDestination "package.json"
$buildFolder     = Join-Path $webUIDestination "build"
if (-not (Test-Path $buildFolder)) {
    if (Test-Path $packageJsonPath) {
        Write-Output "React UI build not found in '$webUIDestination'. Installing dependencies and building the React app..."
        Push-Location $webUIDestination
        Write-Output " =============================== "
        Write-Output " Installing NPM Packages         "
        Write-Output " =============================== "
        npm install --no-fund --audit=false

        # Ensure react-flow-renderer is installed
        Write-Output "Installing React Flow..."
        npm install reactflow --no-fund --audit=false

        # Install Material UI Library
        Write-Output "Installing Material UI Library..."
        npm install @mui/material @emotion/react @emotion/styled --no-fund --audit=false

        npm run build
        Pop-Location
    }
    else {
        Write-Output "No package.json found in '$webUIDestination'; skipping npm install/build."
    }
} else {
    Write-Output "React UI build found. Skipping npm install/build."
}

# --- Change directory to the virtual environment root ---
Push-Location $venvFolder
Write-Output "Current working directory: $(Get-Location)"
$expectedBuildPath = Join-Path (Get-Location) "web-interface\build"
Write-Output "Looking for build folder at: $expectedBuildPath"

# --- Start the Flask server (server.py is inside Borealis folder) ---
Write-Output " =============================== "
Write-Output " Launching Borealis              "
Write-Output " =============================== "
Write-Output "Starting the Flask server..."
python "Borealis\server.py"

# --- Return to original directory and deactivate virtual environment ---
Pop-Location
deactivate