Public/Set-SPSMondayConfiguration.ps1

Function Set-SPSMondayConfiguration {
<#
.SYNOPSIS
    Set the active configuration for the SPSMonday module
.DESCRIPTION
    This function activates a previously created configuration profile for the SPSMonday module.
    It loads the API token and sets up the authentication headers for API calls.
.PARAMETER Name
    The name of the configuration profile to activate
.EXAMPLE
    Set-SPSMondayConfiguration -Name "production"
     
    Activates the "production" configuration profile
.INPUTS
    System.String
.OUTPUTS
    None
.NOTES
    The configuration must be created first using New-SPSMondayConfiguration.
.LINK
    https://developer.monday.com/api-reference/docs/authentication
#>

    [CmdletBinding()]
    Param(
        [Parameter(Mandatory=$true,
            ValueFromPipeline=$true,
            ValueFromPipelineByPropertyName=$true,
            Position=0)]
        [String]$Name
    )

    Begin {
        Write-Verbose -Message "Starting $($MyInvocation.InvocationName)..."
        Write-Verbose -Message "Parameters: Name = '$Name'"
    }
    
    Process {
        try {
            # Check if configuration exists
            $configDir = "$Script:SPSMondayConfigRoot\$Name"
            if (!(Test-Path -Path $configDir)) {
                throw "Configuration '$Name' not found. Please create it first using New-SPSMondayConfiguration."
            }
            
            Write-Verbose -Message "Loading configuration from: $configDir"
            
            # Set active configuration
            $Script:SPSMondayConfigName = $Name
            $Script:SPSMondayConfigDir = $configDir
            
            # Load configuration metadata
            $configPath = "$configDir\config.json"
            if (Test-Path -Path $configPath) {
                $Script:Config = Get-Content -Raw -Path $configPath | ConvertFrom-Json
                Write-Verbose -Message "Configuration metadata loaded"
            } else {
                Write-Warning -Message "Configuration metadata file not found. Using defaults."
                $Script:Config = @{
                    Name = $Name
                    BaseURL = "https://api.monday.com/v2"
                }
            }
            
            # Set base URL
            $Script:BaseURL = $Script:Config.BaseURL
            Write-Verbose -Message "Base URL set to: $Script:BaseURL"
            
            # Load API token
            $tokenPath = "$configDir\token.xml"
            if (!(Test-Path -Path $tokenPath)) {
                throw "API token file not found for configuration '$Name'. Please recreate the configuration."
            }
            
            $tokenCredential = Import-Clixml -Path $tokenPath
            $apiToken = $tokenCredential.GetNetworkCredential().Password
            Write-Verbose -Message "API token loaded successfully"
            
            # Set up authentication headers
            $Script:MondayApiAuthHeader = @{
                "Authorization" = $apiToken
            }
            
            Write-Output "Configuration '$Name' activated successfully."
            Write-Verbose -Message "Authentication headers configured"
            
        }
        catch {
            Write-Error -Message "Error setting configuration: $($_.Exception.Message)"
            throw $_
        }
    }
    
    End {
        Write-Verbose -Message "Ending $($MyInvocation.InvocationName)..."
    }
}