public/functions/Import-PowerStubConfiguration.ps1

<#
.SYNOPSIS
  Imports configuration from the configuration file in the module folder.
 
.DESCRIPTION
 
.LINK
 
.PARAMETER
 
.INPUTS
None. You cannot pipe objects to this function.
 
.OUTPUTS
 
.EXAMPLES
 
#>



function Import-PowerStubConfiguration {
    param (
        [switch] $reset
    )

    if ($reset) {
        $Script:PSTBSettings = Get-PowerStubConfigurationDefaults
        Export-PowerStubConfiguration
        return
    }

    $noImport = Get-PowerStubConfigurationKey 'InternalConfigKeys'
    $fileName = Get-PowerStubConfigurationKey 'ConfigFile'
    $legacyFileName = Get-PowerStubConfigurationKey 'LegacyConfigFile'

    # Ensure config directory exists
    $configDir = Split-Path $fileName -Parent
    if (-not (Test-Path $configDir)) {
        New-Item -ItemType Directory -Path $configDir -Force | Out-Null
        Write-Verbose "Created config directory: $configDir"
    }

    Write-Verbose "Current Configuration:"
    Write-Verbose ($Script:PSTBSettings | ConvertTo-Json)

    # Check for config file, with migration from legacy location
    $configToLoad = $null
    if (Test-Path $fileName) {
        $configToLoad = $fileName
        Write-Verbose "Using config file: $fileName"
    }
    elseif ($legacyFileName -and (Test-Path $legacyFileName)) {
        # Migrate from legacy location (version-specific module folder)
        Write-Host "Migrating PowerStub config from legacy location..." -ForegroundColor Yellow
        Write-Verbose "Legacy config found at: $legacyFileName"
        Copy-Item -Path $legacyFileName -Destination $fileName -Force
        $configToLoad = $fileName
        Write-Host " Config migrated to: $fileName" -ForegroundColor Green

        # Also check parent module folders for other version configs to migrate
        $moduleParent = Split-Path $Script:ModulePath -Parent
        $otherVersionConfigs = Get-ChildItem -Path $moduleParent -Directory -ErrorAction SilentlyContinue |
            Where-Object { $_.Name -ne (Split-Path $Script:ModulePath -Leaf) } |
            ForEach-Object { Join-Path $_.FullName 'PowerStub.json' } |
            Where-Object { Test-Path $_ }

        if ($otherVersionConfigs) {
            Write-Verbose "Found configs in other module versions: $($otherVersionConfigs -join ', ')"
        }
    }

    if ($configToLoad) {
        Write-Verbose "Importing File: $configToLoad"
        $newConfig = Get-Content -Path $configToLoad -Raw | ConvertFrom-Json | ConvertTo-Hashtable
        foreach ($key in $newConfig.Keys) {
            #do not import values for internal keys
            if ($noImport -contains $key) { continue }
            Write-Verbose "Importing Configuration Key: $key"
            $Script:PSTBSettings[$key] = $newConfig[$key]
        }
    }
    else {
        Write-Verbose "No configuration file found. Using defaults."
    }

    Write-Verbose "New Configuration:"
    Write-Verbose ($Script:PSTBSettings | ConvertTo-Json)
}