param(
    [Parameter(Mandatory = $true)]
    [string]$SbomPath,

    [Parameter(Mandatory = $true)]
    [string]$ReportPath
)

$ErrorActionPreference = "Stop"
$projectRoot = Split-Path -Parent (Split-Path -Parent $PSScriptRoot)
$resolvedSbom = (Resolve-Path -LiteralPath $SbomPath).Path
$reportDirectory = Split-Path -Parent $ReportPath
$runtimeCache = Join-Path $projectRoot ".tools\security\runtime-cache"

New-Item -ItemType Directory -Force -Path $reportDirectory | Out-Null
New-Item -ItemType Directory -Force -Path $runtimeCache | Out-Null

$scannerPath = & (Join-Path $PSScriptRoot "bootstrap-osv-scanner.ps1") | Select-Object -Last 1
if (-not (Test-Path -LiteralPath $scannerPath)) {
    throw "OSV-Scanner wurde nicht gefunden: $scannerPath"
}

$previousTemp = $env:TEMP
$previousTmp = $env:TMP
$previousXdgCache = $env:XDG_CACHE_HOME
$env:TEMP = $runtimeCache
$env:TMP = $runtimeCache
$env:XDG_CACHE_HOME = $runtimeCache

try {
    & $scannerPath scan --format json --output-file $ReportPath $resolvedSbom
    $scannerExitCode = $LASTEXITCODE
} finally {
    $env:TEMP = $previousTemp
    $env:TMP = $previousTmp
    $env:XDG_CACHE_HOME = $previousXdgCache
}

if ($scannerExitCode -eq 1) {
    throw "Bekannte Schwachstellen gefunden. Bericht: $ReportPath"
}
if ($scannerExitCode -ne 0) {
    throw "OSV-Scanner ist mit Exit-Code $scannerExitCode fehlgeschlagen. Bericht: $ReportPath"
}

Write-Host "Keine bekannten Schwachstellen in $resolvedSbom gefunden."
