Private/Initialize-TbConfig.ps1

function Initialize-TbConfig {
    <#
    .SYNOPSIS
        Initializes the Toolbox configuration.
     
    .DESCRIPTION
        Creates default configuration if it doesn't exist and loads it into memory.
        This is an internal function called during module initialization.
    #>

    [CmdletBinding()]
    param()
    
    try {
        # Define configuration path
        $configDir = Join-Path $env:APPDATA 'Toolbox'
        $configPath = Join-Path $configDir 'Config.json'
        
        # Create directory if it doesn't exist
        if (-not (Test-Path $configDir)) {
            New-Item -ItemType Directory -Path $configDir -Force | Out-Null
            Write-Verbose "Created configuration directory: $configDir"
        }
        
        # Load or create configuration
        if (Test-Path $configPath) {
            Write-Verbose "Loading configuration from: $configPath"
            $config = Get-Content -Path $configPath -Raw | ConvertFrom-Json
        }
        else {
            Write-Verbose "Creating default configuration"
            $defaultConfigPath = Join-Path $script:ModuleRoot 'Config\Config.Default.json'
            $config = Get-Content -Path $defaultConfigPath -Raw | ConvertFrom-Json
            
            # Set dynamic paths
            $config.Logging.LogPath = Join-Path $configDir 'Logs'
            $config.Tasks.BuiltInTaskPath = Join-Path $script:ModuleRoot 'Tasks\BuiltIn'
            $config.Tasks.SystemTaskPath = Join-Path $env:ProgramData 'Toolbox\Tasks'
            $config.Tasks.UserTaskPath = Join-Path $env:APPDATA 'Toolbox\Tasks'
            
            # Create log directory
            if (-not (Test-Path $config.Logging.LogPath)) {
                New-Item -ItemType Directory -Path $config.Logging.LogPath -Force | Out-Null
            }
            
            # Save configuration
            $config | ConvertTo-Json -Depth 10 | Set-Content -Path $configPath -Force
            Write-Verbose "Default configuration created at: $configPath"
        }
        
        # Store in module scope
        $script:ModuleConfig = $config
        $script:ConfigPath = $configPath
        
        Write-Verbose "Configuration initialized successfully"
    }
    catch {
        Write-Error "Failed to initialize configuration: $_"
        throw
    }
}