DevVm.psm1

#region Module initialization
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8

# Get the module root directory
$script:ModuleRoot = Split-Path -Parent $MyInvocation.MyCommand.Path
$script:PublicFunctionsPath = Join-Path -Path $script:ModuleRoot -ChildPath 'Public'
$script:PrivateFunctionsPath = Join-Path -Path $script:ModuleRoot -ChildPath 'Private'
$script:DataPath = Join-Path -Path $script:ModuleRoot -ChildPath 'Data'

# Import private functions
if (Test-Path $script:PrivateFunctionsPath) {
    $privateFunctions = @(Get-ChildItem -Path $script:PrivateFunctionsPath -Filter '*.ps1' -ErrorAction SilentlyContinue)
    foreach ($privateFunction in $privateFunctions) {
        . $privateFunction.FullName
    }
}

# Import public functions
if (Test-Path $script:PublicFunctionsPath) {
    $publicFunctions = @(Get-ChildItem -Path $script:PublicFunctionsPath -Filter '*.ps1' -ErrorAction SilentlyContinue)
    foreach ($publicFunction in $publicFunctions) {
        . $publicFunction.FullName
    }
}

# Initialize module configuration
$script:DevVmConfig = @{
    RuntimeDefinitions = $null
    ConfigPaths = $null
    SessionSelections = @{
    }
}

# Load runtime definitions
$runtimeDefPath = Join-Path -Path $script:DataPath -ChildPath 'runtime-definitions.json'
if (Test-Path $runtimeDefPath) {
    try {
        $script:DevVmConfig.RuntimeDefinitions = Get-Content -Path $runtimeDefPath -Raw | ConvertFrom-Json
    }
    catch {
        Write-Warning "Failed to load runtime definitions from $runtimeDefPath"
    }
}

# Setup default config paths
Initialize-DevVmConfigPath

#endregion

# Create alias for quick access
New-Alias -Name 'devvm' -Value 'Invoke-DevVm' -Force -ErrorAction SilentlyContinue