Functions/GenXdev.AI.Queries/Get-ImageDirectories.ps1

################################################################################
<#
.SYNOPSIS
Gets the configured directories and default language for image files used in
GenXdev.AI operations.
 
.DESCRIPTION
This function retrieves the global image directories and default language used
by the GenXdev.AI module for various image processing and AI operations. It
returns the configuration from both global variables and the module's
preference storage, with fallback to system defaults.
 
.PARAMETER DefaultValue
Optional default value to return if no image directories are configured. If
not specified, returns the system default directories (Downloads, OneDrive,
Pictures).
 
.EXAMPLE
Get-ImageDirectories
 
Returns the configured image directories and default language, or system
defaults if none are configured.
 
.EXAMPLE
$config = Get-ImageDirectories -DefaultValue @("C:\MyImages")
 
Returns configured directories or the specified default if none are configured.
 
.EXAMPLE
getimgdirs
 
Uses alias to get the current image directory configuration.
#>

function Get-ImageDirectories {

    [CmdletBinding()]
    [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseSingularNouns', '')]
    [Alias("getimgdirs")]

    param(
        ###############################################################################
        [Parameter(
            Mandatory = $false,
            Position = 0,
            HelpMessage = "Default directories to return if none are configured"
        )]
        [AllowNull()]
        [string[]] $DefaultValue = $null
        ###############################################################################
    )

    begin {

        # initialize result object
        $result = [PSCustomObject]@{
            ImageDirectories = @()
            Language = "English"
        }
    }

    process {

        # get image directories from preferences or global variable
        $imageDirectoriesPreference = $null

        try {

            # retrieve image directories preference from genxdev data storage
            $json = GenXdev.Data\Get-GenXdevPreference `
                -Name "ImageDirectories" `
                -DefaultValue $null `
                -ErrorAction SilentlyContinue

            if (-not [string]::IsNullOrEmpty($json)) {

                # convert json preference to powershell object
                $imageDirectoriesPreference = $json |
                    Microsoft.PowerShell.Utility\ConvertFrom-Json
            }
        }
        catch {

            # set to null if preference retrieval fails
            $imageDirectoriesPreference = $null
        }

        # determine which image directories to use based on priority
        if ($null -ne $imageDirectoriesPreference -and
            $imageDirectoriesPreference.Count -gt 0) {

            # use preference value if available and not empty
            $result.ImageDirectories = $imageDirectoriesPreference
        }
        elseif ($Global:ImageDirectories -and $Global:ImageDirectories.Count -gt 0) {

            # fallback to global variable if preference not available
            $result.ImageDirectories = $Global:ImageDirectories
        }
        elseif ($null -ne $DefaultValue) {

            # use provided default value if no other configuration exists
            $result.ImageDirectories = $DefaultValue
        }
        else {

            # fallback to default system directories
            $picturesPath = GenXdev.FileSystem\Expand-Path "~\Pictures"

            try {

                # attempt to get known folder path for pictures directory
                $picturesPath = GenXdev.Windows\Get-KnownFolderPath Pictures
            }
            catch {

                # fallback to default if known folder retrieval fails
                $picturesPath = GenXdev.FileSystem\Expand-Path "~\Pictures"
            }

            # define default directories for image processing operations
            $result.ImageDirectories = @(
                (GenXdev.FileSystem\Expand-Path '~\downloads'),
                (GenXdev.FileSystem\Expand-Path '~\\onedrive'),
                $picturesPath
            )
        }

        # determine which default language to use for image metadata
        if ($Global:DefaultImagesMetaLanguage) {

            # use global variable if available
            $result.Language = $Global:DefaultImagesMetaLanguage
        }
        else {

            # try to get from preferences
            try {

                # retrieve default language preference from genxdev data storage
                $defaultLanguage = GenXdev.Data\Get-GenXdevPreference `
                    -Name "DefaultImagesMetaLanguage" `
                    -DefaultValue "English" `
                    -ErrorAction SilentlyContinue

                if (-not [string]::IsNullOrEmpty($defaultLanguage)) {

                    # use preference value if available and not empty
                    $result.Language = $defaultLanguage
                }
                else {

                    # fallback to english if preference is empty
                    $result.Language = "English"
                }
            }
            catch {

                # fallback to english if preference retrieval fails
                $result.Language = "English"
            }
        }

        # output verbose information about retrieved configuration
        Microsoft.PowerShell.Utility\Write-Verbose (
            "Retrieved image directories: [$($result.ImageDirectories -join ', ')] " +
            "with default language: $($result.Language)"
        )
    }

    end {

        # return the configured image directories and language
        return $result
    }
}
################################################################################