#!/usr/bin/env nu
# Prepare Nushell installation on infrastructure servers

let wk_vars = ($env.PROVISIONING_VARS? | default "")
if ($wk_vars | is-empty) or not ($wk_vars | path exists) {
    print "🛑 PROVISIONING_VARS not set or file not found"
    exit 1
}

let data = (open $wk_vars)
let taskserv_pos = ($data.pos?.taskserv? | default 0)
let taskserv = ($data.server?.taskservs? | default [] | get -o $taskserv_pos | default {})

print $"(ansi green_bold)Nushell Runtime(ansi reset) preparing with ($wk_vars)"

let target_path = ($env.PROVISIONING_WK_ENV_PATH? | default "")
if ($target_path | is-empty) {
    print "🛑 PROVISIONING_WK_ENV_PATH not set"
    exit 1
}

^mkdir -p $"($target_path)/.config/nushell"
^mkdir -p $"($target_path)/.local/bin"
^mkdir -p $"($target_path)/.local/share/nushell"
^mkdir -p $"($target_path)/nushell/scripts"
^mkdir -p $"($target_path)/nushell/observability"
^mkdir -p $"($target_path)/nushell/lib"

^chmod 750 $"($target_path)/nushell"
^chmod 700 $"($target_path)/nushell/scripts"

if ($taskserv.nushell_plugins? | default false) {
    ^mkdir -p $"($target_path)/.local/share/nushell/plugins"
}

let ssh_keys = ($taskserv.ssh_keys? | default "" | str replace "~" $env.HOME | str trim)
if $ssh_keys != "" {
    ^mkdir -p $"($target_path)/.ssh"
    for key in ($ssh_keys | split row " ") {
        if ($key | path exists) {
            cp $key $"($target_path)/.ssh"
            ^chmod 600 $"($target_path)/.ssh/($key | path basename)"
        }
        if ($"($key).pub" | path exists) {
            cp $"($key).pub" $"($target_path)/.ssh"
            ^chmod 644 $"($target_path)/.ssh/($key | path basename).pub"
        }
    }
}

let admin_user = ($taskserv.admin_user? | default "root")
# chown is applied on the remote server post-install, not during local prepare
do -i { ^chown -R $"($admin_user):($admin_user)" $"($target_path)/nushell" }

print "✅ Nushell environment prepared successfully"
