$ErrorActionPreference = 'Stop'

$cli = Get-Command arduino-cli.exe -ErrorAction SilentlyContinue |
    Select-Object -First 1 -ExpandProperty Source
if (!$cli) {
    $cli = Get-ChildItem `
        (Join-Path $env:LOCALAPPDATA 'Microsoft\WinGet\Packages') `
        -Recurse `
        -Filter 'arduino-cli.exe' `
        -ErrorAction SilentlyContinue |
        Select-Object -First 1 -ExpandProperty FullName
}
if (!$cli) { throw 'Arduino CLI wurde nicht gefunden.' }

& $cli core update-index | Out-Null
if ($LASTEXITCODE -ne 0) { throw 'Arduino Board-Index konnte nicht aktualisiert werden.' }
& $cli core install arduino:avr | Out-Null
if ($LASTEXITCODE -ne 0) { throw 'Arduino AVR-Core konnte nicht installiert werden.' }

$sparkFunIndex = 'https://raw.githubusercontent.com/sparkfun/Arduino_Boards/master/IDE_Board_Manager/package_sparkfun_index.json'
& $cli core update-index --additional-urls $sparkFunIndex | Out-Null
if ($LASTEXITCODE -ne 0) { throw 'SparkFun Board-Index konnte nicht aktualisiert werden.' }
& $cli core install SparkFun:avr --additional-urls $sparkFunIndex | Out-Null
if ($LASTEXITCODE -ne 0) { throw 'SparkFun AVR-Core konnte nicht installiert werden.' }

Write-Output $cli
