# Percorsi file $inputJsonPath = Join-Path $PSScriptRoot ".." "env.json.template" # JSON originale $outputJsonPath = Join-Path $PSScriptRoot ".." "env.json" # JSON di destinazione # Lettura JSON originale mantenendo l'ordine $rawJson = Get-Content $inputJsonPath -Raw $parsedJson = $rawJson | ConvertFrom-Json -AsHashtable # Se env.json esiste, lo carico per preservare le sezioni non aggiornate $existingEnv = $null if (Test-Path $outputJsonPath) { $existingEnv = (Get-Content $outputJsonPath -Raw) | ConvertFrom-Json -AsHashtable } # Funzione per chiedere Y|S/N function Ask-YesNo($message) { while ($true) { $resp = Read-Host "$message [YySs/Nn]" switch ($resp.ToUpper()) { "Y" { return $true } "S" { return $true } default { return $false } } } } # Funzione per chiedere un valore function Ask-Value($key, $currentValue) { $currentValueHint = "" if (-not [string]::IsNullOrEmpty($currentValue)) { $currentValueHint = "[attuale: '$currentValue'] " } return Read-Host "Chiave '$key' $currentValueHint`n(digita `"`" per inserire stringa vuota e lascia vuoto per NON aggiornare)" } # Copia profonda preservando ordine $newJson = [ordered]@{} foreach ($topKey in $parsedJson.Keys) { if ($topKey -eq "Config") { # Copia Config senza modifiche, i parametri serviranno dopo la generazione $newJson["Config"] = $parsedJson["Config"] continue } # Sezione API → trattamento speciale if ($topKey -eq "API") { $newJson["API"] = [ordered]@{} foreach ($sectionName in $parsedJson["API"].Keys) { $section = $parsedJson["API"][$sectionName] $shouldConfigure = Ask-YesNo "Vuoi configurare la sezione '$sectionName'?" # Se NON voglio configurare → devo distinguere: if (-not $shouldConfigure) { Write-Host "Sezione '$sectionName' non configurata. Mantengo valori esistenti, se presenti." -ForegroundColor Yellow # 1. Se NON esiste già env.json → creo sezione vuota uguale al template if (-not $existingEnv) { $newJson["API"][$sectionName] = $section continue } # 2. Se esiste già env.json e sia API che la sezione sono presenti → mantengo la versione esistente if ($existingEnv["API"] -and $existingEnv["API"].Contains($sectionName)) { $newJson["API"][$sectionName] = $existingEnv["API"][$sectionName] continue } # 3. Se esiste già env.json, ma API o la sezione non sono presenti → creo sezione vuota uguale al template $newJson["API"][$sectionName] = $section continue } # Altrimenti creo una nuova sezione (o aggiorno quella esistente) $newSection = [ordered]@{} foreach ($key in $section.Keys) { if ($key -eq "_httpyac_only") { # Mantieni la chiave speciale senza chiedere input $newSection[$key] = $section[$key] continue } if ($existingEnv -and $existingEnv["API"] -and $existingEnv["API"].Contains($sectionName)) { $oldValue = $existingEnv["API"][$sectionName][$key] } else { $oldValue = "" } $inputValue = Ask-Value $key $oldValue if ($inputValue -eq "") { # Mantieni valore esistente se presente $newSection[$key] = $oldValue } elseif ($inputValue -eq "`"`"") { # Aggiorna con stringa vuota $newSection[$key] = "" } else { # Aggiorna con nuovo valore $newSection[$key] = $inputValue } } $newJson["API"][$sectionName] = $newSection } } else { # Altri elementi allo stesso livello di API → preservati integralmente if ($existingEnv -and $existingEnv.Contains($topKey)) { $newJson[$topKey] = $existingEnv[$topKey] } else { $newJson[$topKey] = $parsedJson[$topKey] } } } # Scrittura JSON finale mantenendo l'ordine $newJson | ConvertTo-Json -Depth 20 | Set-Content $outputJsonPath -Encoding UTF8 Write-Host "`nFile env.json aggiornato correttamente."