. $PSScriptRoot\_echo.ps1

# Garante que os scripts de implantacao rodem com a versao de Node.js homologada
# (14.15.0, distribuida portatil pelo MicroUniverso.Instalador em
# C:\microuniversoWeb\node-v14). Ao carregar este arquivo:
#   1) procura node.exe em uma lista de caminhos candidatos
#   2) valida que a versao bate com a esperada (14.x)
#   3) prefixa esse diretorio em $env:PATH para a sessao atual do PowerShell,
#      de forma que node/npm/js-yaml/etc resolvam para a versao correta em
#      qualquer subprocesso disparado pelos scripts
# Se nenhum candidato compativel for encontrado, falha duro com mensagem
# orientando a usar o MicroUniverso.Instalador.

$global:mu_versaoNodeEsperada = "14"

# Ordem de preferencia. O segundo caminho cobre o caso em que o ZIP oficial do
# Node (node-v14.15.0-win-x64.zip) e extraido preservando a pasta wrapper.
$global:mu_caminhosCandidatosNode = @(
    "C:\microuniversoWeb\node-v14",
    "C:\microuniversoWeb\node-v14\node-v14.15.0-win-x64",
    "C:\Program Files\nodejs"
)

function global:mu.obterVersaoDeNode() {
    param([string]$caminhoNodeExe)

    if (-not (Test-Path $caminhoNodeExe)) { return $null }

    try {
        $saida = & $caminhoNodeExe --version 2>$null
        if ($LASTEXITCODE -ne 0) { return $null }
        return ($saida -replace '^v', '')
    } catch {
        return $null
    }
}

function global:mu.obterDiretorioNodeCompativel() {
    foreach ($candidato in $global:mu_caminhosCandidatosNode) {
        $caminhoExe = Join-Path $candidato "node.exe"
        $versao = mu.obterVersaoDeNode -caminhoNodeExe $caminhoExe
        if ($null -eq $versao) { continue }

        if ($versao -match "^$($global:mu_versaoNodeEsperada)\.") {
            return $candidato
        }
    }
    return $null
}

function global:mu.prefixarPathComNode() {
    param([string]$diretorioNode)

    $separator = [IO.Path]::PathSeparator
    $pathItens = $env:PATH -split $separator | Where-Object { $_ }
    $jaPresente = $pathItens | Where-Object { $_.TrimEnd('\') -ieq $diretorioNode.TrimEnd('\') }
    if ($jaPresente) { return }

    $env:PATH = "$diretorioNode$separator$env:PATH"
}

$global:mu_diretorioNode = mu.obterDiretorioNodeCompativel

if (-not $global:mu_diretorioNode) {
    $caminhosTestados = $global:mu_caminhosCandidatosNode -join "`n  - "
    throw @"
Node.js $($global:mu_versaoNodeEsperada).x nao foi encontrado em nenhum caminho conhecido.
Caminhos verificados:
  - $caminhosTestados

Execute o MicroUniverso.Instalador para instalar a versao portatil em
'C:\microuniversoWeb\node-v14', ou extraia manualmente o pacote
node-v14.15.0-win-x64 para esse diretorio.
"@
}

mu.prefixarPathComNode -diretorioNode $global:mu_diretorioNode

$global:mu_caminhoNode = Join-Path $global:mu_diretorioNode "node.exe"
$global:mu_caminhoNpm = Join-Path $global:mu_diretorioNode "npm.cmd"

# Aliases para comandos nativos preservam o separador "--" usado pelo npm para
# encaminhar argumentos aos scripts. Uma funcao PowerShell removeria esse token.
Set-Alias -Name "mu.node" -Value $global:mu_caminhoNode -Scope Global
Set-Alias -Name "mu.npm" -Value $global:mu_caminhoNpm -Scope Global
