Init/Get-Emoji.ps1

#requires -version 5

<#
    .SYNOPSIS
        Helper functions for console output with emoji support across PowerShell versions.

    .DESCRIPTION
        Provides emoji output that works consistently across PowerShell 5.1, 7.0+, and different
        console hosts (Windows PowerShell console, PowerShell Core, VS Code terminal, etc.).
#>


# Global emoji character mapping
# Using ASCII codes for PS5 to avoid encoding issues
$script:EmojiMap = @{
    'checkmark'       = if ($PSVersionTable.PSVersion.Major -ge 7) { '✅' } else { "[$([char]0x221A)]" }  # √ (square root)
    'cross'           = if ($PSVersionTable.PSVersion.Major -ge 7) { '❌' } else { "[$([char]0x00D7)]" }  # × (multiplication sign)
    'warning'         = if ($PSVersionTable.PSVersion.Major -ge 7) { '⚠️' } else { "[$([char]0x26A0)]" }  # ⚠ (warning sign)
    'info'            = if ($PSVersionTable.PSVersion.Major -ge 7) { 'ℹ️' } else { "[$([char]0x0069)]" }  # i (lowercase i)
    'star'            = if ($PSVersionTable.PSVersion.Major -ge 7) { '⭐' } else { "[$([char]0x002A)]" }  # * (asterisk)
    'party'           = if ($PSVersionTable.PSVersion.Major -ge 7) { '🎉' } else { "[$([char]0x005E)]" }  # ^ (caret)
    'hourglass'       = if ($PSVersionTable.PSVersion.Major -ge 7) { '⏳' } else { "[$([char]0x007E)]" }  # ~ (tilde)
    'unknown'         = if ($PSVersionTable.PSVersion.Major -ge 7) { '❓' } else { "[$([char]0x003F)]" }  # ? (question mark)
    'right'           = if ($PSVersionTable.PSVersion.Major -ge 7) { '➡️' } else { "[$([char]0x00BB)]" }  # » (right double angle)
    'left'            = if ($PSVersionTable.PSVersion.Major -ge 7) { '⬅️' } else { "[$([char]0x00AB)]" }  # « (left double angle)
}

function Get-Emoji {
    <#
        .SYNOPSIS
            Gets an emoji character or fallback for the current PowerShell version.

        .DESCRIPTION
            Returns an emoji character on PowerShell 7+ or a text fallback on PowerShell 5.1.
            This ensures consistent output across different PowerShell versions and console hosts.

        .PARAMETER Name
            The name of the emoji to retrieve. Valid values:
            - checkmark (✅ or √)
            - cross (❌ or ×)
            - warning (⚠️ or ⚠)
            - info (ℹ️ or i)
            - star (⭐ or *)
            - party (🎉 or ^)
            - hourglass (⏳ or ~)
            - unknown (❓ or ?)
            - right (➡️ or »)
            - left (⬅️ or «)

        .EXAMPLE
            Write-Host "$(Get-Emoji checkmark) Success"
            # PowerShell 7+: ✅ Success
            # PowerShell 5.1: √ Success

        .EXAMPLE
            Write-Warning "$(Get-Emoji warning) Configuration file not found"
            # PowerShell 7+: ⚠️ Configuration file not found
            # PowerShell 5.1: ⚠ Configuration file not found
    #>

    [CmdletBinding()]
    [OutputType([string])]
    param(
        [Parameter(Mandatory, Position = 0)]
        [ValidateSet('checkmark', 'cross', 'warning', 'info', 'star', 'party', 'hourglass', 'unknown', 'right', 'left')]
        [string] $Name
    )

    if ($script:EmojiMap.ContainsKey($Name)) {
        return $script:EmojiMap[$Name]
    }
    else {
        Write-Warning "Unknown emoji name: $Name"
        return '[?]'
    }
}