Scripts/local-sign.ps1

param(
    [Parameter(Mandatory)]
    [string]$ProfilePath,

    [Parameter(Mandatory)]
    [string[]]$Files
)

$signingProfile = Get-Content $ProfilePath | ConvertFrom-Json

if ($signingProfile.type -ne 'local') {
    throw "Profile is not a local signing profile"
}

$securePassword = Get-Content "$($ProfilePath -replace '\.json$')-pwd" | ConvertTo-SecureString

. $PSScriptRoot\common.ps1
$password = Convert-SecureStringToPlainText -SecureString $securePassword

$signCommand = @(
    "sign",
    "/f", $signingProfile.certificatePath,
    "/p", $password
)

# Add additional parameters if specified
if ($signingProfile.PSObject.Properties.Name -contains "additionalParams" -and -not [string]::IsNullOrWhiteSpace($signingProfile.additionalParams)) {
    Write-Output "Using additional parameters: $($signingProfile.additionalParams)"
    $additionalParamsArray = $signingProfile.additionalParams -split ' '
    $signCommand += $additionalParamsArray
}

# Add the file to sign
$fileString = $Files -join ' '
$signCommand += $fileString

$command = "& `"$($signingProfile.signToolPath)`" $signCommand"
Invoke-Expression $command

if ($LASTEXITCODE -ne 0) {
    Write-Error "Failed to sign files: $fileString"
}
else {
    Write-Output "Successfully signed files: $fileString"
}