# List all infrastructures in active workspace
# This file is sourced by bash after lib_minimal.nu is loaded
# Not meant to be run standalone

# Get active workspace
let ws_result = (workspace-active)
let active_ws = if (is-ok $ws_result) { $ws_result.ok } else { "" }
if ($active_ws | is-empty) {
    print 'No active workspace'
    exit 1
}

# Get workspace path from config
let user_config_path = (
    $env.HOME
    | path join 'Library'
    | path join 'Application Support'
    | path join 'provisioning'
    | path join 'user_config.yaml'
)

if not ($user_config_path | path exists) {
    print 'Config not found'
    exit 1
}

let config = (open $user_config_path)
let workspaces = ($config | get --optional workspaces | default [])
let ws = ($workspaces | where { $in.name == $active_ws } | first)

if ($ws | is-empty) {
    print 'Workspace not found'
    exit 1
}

let ws_path = $ws.path
let infra_path = ($ws_path | path join 'infra')

if not ($infra_path | path exists) {
    print '📁 Available Infrastructures: (none configured)'
    exit 0
}

# List all infrastructures
let infras = (
    ls $infra_path
    | where type == 'dir'
    | each {|inf|
        let inf_name = ($inf.name | path basename)
        let inf_full_path = ($infra_path | path join $inf_name)
        let has_config = (($inf_full_path | path join 'settings.ncl') | path exists)

        {
            name: $inf_name
            configured: $has_config
            modified: $inf.modified
        }
    }
)

if ($infras | length) == 0 {
    print '📁 Available Infrastructures: (none found)'
} else {
    print '📁 Available Infrastructures:'
    print ''
    $infras | each {|inf|
        let status = if $inf.configured { '✓' } else { '○' }
        let output = "  [" + $status + "] " + $inf.name
        print $output
    } | ignore
}
