public/environmentCache.ps1


$DEFAULT_DISPLAY_FIELDS = @("id","title")

function Get-ProjectHelperEnvironment{
    [CmdletBinding()]
    param()

    $ret = @{

        # Last Known Good Owner
        Owner         = Get-EnvItem -Name "EnvironmentCache_Owner"
        # Last Known Good Project Number
        ProjectNumber = Get-EnvItem -Name "EnvironmentCache_ProjectNumber"
        # List of fields to display on Items display commands. Useful with ConvertToItemDisplay
        # TODO : Consider if its worth keeping this setting
        DisplayFields = Get-EnvItem -Name "EnvironmentCache_Display_Fields"
    }

    return $ret

} Export-ModuleMember -Function Get-ProjectHelperEnvironment

function Reset-ProjectHelperEnvironment{
    [CmdletBinding()]
    param()

    Set-EnvItem -Name "EnvironmentCache_Owner" -Value $null
    Set-EnvItem -Name "EnvironmentCache_ProjectNumber" -Value $null
    Set-EnvItem -Name "EnvironmentCache_Display_Fields" -Value $null

} Export-ModuleMember -Function Reset-ProjectHelperEnvironment

function Set-ProjectHelperEnvironment{
    [CmdletBinding()]
    param(
        [Parameter()][string]$Owner,
        [Parameter()][string]$ProjectNumber,
        [Parameter()][string[]]$DisplayFields
    )

    if(! [string]::IsNullOrWhiteSpace($Owner)) {
        Set-EnvItem -Name "EnvironmentCache_Owner" -Value $Owner
    }

    if(! [string]::IsNullOrWhiteSpace($ProjectNumber)) {
        Set-EnvItem -Name "EnvironmentCache_ProjectNumber" -Value $ProjectNumber
    }
    if($DisplayFields) {
        Set-EnvItem -Name "EnvironmentCache_Display_Fields" -Value $DisplayFields
    }

} Export-ModuleMember -Function Set-ProjectHelperEnvironment

function Get-OwnerAndProjectNumber{
    [CmdletBinding()]
    param(
        [Parameter()][string]$Owner,
        [Parameter()][string]$ProjectNumber
    )

    if($ProjectNumber -eq "0"){
        $ProjectNumber = [string]::Empty
    }

    $ownerCache = Get-EnvItem -Name "EnvironmentCache_Owner"
    if([string]::IsNullOrWhiteSpace($Owner)){
        $owner = $ownerCache
    } else {
        if($owner -ne $ownerCache){
            Set-EnvItem -Name "EnvironmentCache_Owner" -Value $Owner
        }
    }
 
    $projectNumberCache = Get-EnvItem -Name "EnvironmentCache_ProjectNumber"
    if([string]::IsNullOrWhiteSpace($ProjectNumber)){
        $ProjectNumber = $projectNumberCache
    } else {
        if($ProjectNumber -ne $projectNumberCache){
            Set-EnvItem -Name "EnvironmentCache_ProjectNumber" -Value $ProjectNumber
        }
    }

    return ($owner, $ProjectNumber)
}

function Get-EnvironmentDisplayFields{
    [CmdletBinding()]
    param(
        [Parameter()][string[]]$Fields
    )

    $displayFields = Get-EnvItem -Name "EnvironmentCache_Display_Fields"
    # Use this order
    $fields_Options = @()
    if ($DEFAULT_DISPLAY_FIELDS) { $fields_Options += $DEFAULT_DISPLAY_FIELDS }
    if ($Fields) { $fields_Options += $Fields }
    if ($displayFields) { $fields_Options += $displayFields }

    # Remove nulls empty and duplicates
    $ret = $fields_Options | Select-Object -Unique | Where-Object {-Not [string]::IsNullOrWhiteSpace($_)}

    return $ret
}

function Get-EnvItem{
    [CmdletBinding()]
    param(
        [Parameter(Position=0)][string]$Name
    )

    $ret = Get-Database -Key $Name

    # $ret = Get-Variable -Name $Name -ValueOnly -Scope Script


    return $ret

}

function Set-EnvItem{
    [CmdletBinding()]
    param(
        [Parameter(Position=0)][string]$Name,
        [Parameter(Position=1)][object]$Value
    )

    # Set-Variable -Name $Name -Value $Value -Scope Script

    Save-Database -Key $Name -Database $Value

}

function Get-DefaultDisplayFields{
    [CmdletBinding()]
    param()

    # return Get-EnvItem -Name "EnvironmentCache_Display_Fields"
    return $DEFAULT_DISPLAY_FIELDS
}