# Get-PCProfile.ps1 - Shared helper for resolving the active PC profile
# from site-config.json. Dot-source this from any script that needs
# profile-aware configuration:
#
#   . "$PSScriptRoot\lib\Get-PCProfile.ps1"   (from Shopfloor\ scripts)
#   . "$PSScriptRoot\Get-PCProfile.ps1"       (from lib\ scripts)
#
# After dot-sourcing, these variables are available:
#   $siteConfig   - full parsed site-config.json (or $null)
#   $pcType       - from pc-type.txt (e.g. "Standard", "CMM", "Display")
#   $pcSubtype    - from pc-subtype.txt (e.g. "Timeclock", "Machine", "Lobby")
#   $profileKey   - lookup key (e.g. "Standard-Machine", "CMM", "Display-Lobby")
#   $pcProfile    - the matched profile object from pcProfiles, or $null
#
# Resolution order for any config key (e.g. startupItems):
#   1. $pcProfile.startupItems     (profile-specific override)
#   2. $siteConfig.startupItems    (site-wide default)
#   3. (hardcoded fallback in the calling script)
#
# Usage pattern in consuming scripts:
#   $items = Get-ProfileValue 'startupItems'
#   if ($null -ne $items) { ... } else { <hardcoded fallback> }
#
# Get-ProfileValue distinguishes "not set" ($null) from "explicitly empty"
# (@()) so a profile can opt out of a site-wide default by setting the
# key to []. Do NOT use truthiness checks like `if ($pcProfile.startupItems)`
# because an empty array is falsy and would fall through to site defaults.

function Get-ProfileValue {
    param([Parameter(Mandatory)][string]$Key)
    if ($pcProfile -and ($pcProfile.PSObject.Properties.Name -contains $Key)) {
        return ,@($pcProfile.$Key)
    }
    if ($siteConfig -and ($siteConfig.PSObject.Properties.Name -contains $Key)) {
        return ,@($siteConfig.$Key)
    }
    return $null
}

function Get-SiteConfig {
    $configPath = 'C:\Enrollment\site-config.json'
    if (-not (Test-Path -LiteralPath $configPath)) {
        Write-Host "site-config.json not found - using defaults" -ForegroundColor DarkGray
        return $null
    }
    try {
        return (Get-Content -LiteralPath $configPath -Raw -ErrorAction Stop | ConvertFrom-Json)
    } catch {
        Write-Warning "Failed to parse site-config.json: $_"
        return $null
    }
}

$siteConfig = Get-SiteConfig

# Read PC type + sub-type from the files startnet.cmd wrote during imaging
$pcType = ''
$pcSubtype = ''
$typeFile = 'C:\Enrollment\pc-type.txt'
$subtypeFile = 'C:\Enrollment\pc-subtype.txt'

if (Test-Path -LiteralPath $typeFile) {
    $pcType = (Get-Content -LiteralPath $typeFile -First 1 -ErrorAction SilentlyContinue).Trim()
}
if (Test-Path -LiteralPath $subtypeFile) {
    $pcSubtype = (Get-Content -LiteralPath $subtypeFile -First 1 -ErrorAction SilentlyContinue).Trim()
}

# Build the profile key: "Standard-Machine", "CMM", "Display-Lobby", etc.
$profileKey = if ($pcSubtype) { "$pcType-$pcSubtype" } else { $pcType }

# Look up the profile in pcProfiles. Fall back to $null (callers use
# site-wide defaults or hardcoded values).
$pcProfile = $null
if ($siteConfig -and $siteConfig.pcProfiles -and $profileKey) {
    $pcProfile = $siteConfig.pcProfiles.$profileKey
}

if ($pcProfile) {
    Write-Host "PC profile: $profileKey" -ForegroundColor Cyan
} elseif ($profileKey) {
    Write-Host "PC profile '$profileKey' not found in site-config.json - using site defaults" -ForegroundColor DarkGray
}
