# setup-bot-env.ps1
# Set Windows User-scope env vars для autonomous multi-agent workflow.
#
# Запускается ОДИН РАЗ на каждой машине пользователя. Не нужен admin.
# Effect: 7 User-scope env vars persistent в registry.
#
# Где взять токены:
#   1. Vault meta/00_credentials.md (sensitive, не в git) — секция "Forgejo bot-users"
#   2. Или сгенерировать новые: см. там же секция "Rotation / revocation"
#
# Безопасность:
#   - Скрипт ожидает чтобы ты ВПИСАЛ tokens сам перед запуском (placeholder ниже)
#   - НЕ коммить скрипт с реальными токенами!
#   - После запуска env vars в registry — можешь удалить локальную копию

# ──────────────────────────────────────────────────────────────────────
# REPLACE PLACEHOLDERS BELOW WITH ACTUAL TOKENS FROM VAULT
# ──────────────────────────────────────────────────────────────────────

$tokens = @{
    "FORGEJO_TOKEN_ANALYST"   = "REPLACE_ME_FROM_VAULT"
    "FORGEJO_TOKEN_BACKEND"   = "REPLACE_ME_FROM_VAULT"
    "FORGEJO_TOKEN_FRONTEND"  = "REPLACE_ME_FROM_VAULT"
    "FORGEJO_TOKEN_REVIEWER"  = "REPLACE_ME_FROM_VAULT"
    "FORGEJO_TOKEN_QA"        = "REPLACE_ME_FROM_VAULT"
    "FORGEJO_URL_BOTS"        = "https://git.gendsgn.ru"
    "FORGEJO_REPO_BOTS"       = "lekss361/gendesign"
}

# ──────────────────────────────────────────────────────────────────────
# Validation
# ──────────────────────────────────────────────────────────────────────

$placeholderCount = ($tokens.Values | Where-Object { $_ -eq "REPLACE_ME_FROM_VAULT" }).Count
if ($placeholderCount -gt 0) {
    Write-Error "❌ $placeholderCount placeholders не заменены. Открой vault meta/00_credentials.md, секция 'Forgejo bot-users', и вставь реальные PAT'ы вместо REPLACE_ME_FROM_VAULT."
    exit 1
}

# ──────────────────────────────────────────────────────────────────────
# Apply
# ──────────────────────────────────────────────────────────────────────

Write-Host "=== Setting 7 User-scope env vars (persistent) ===" -ForegroundColor Cyan

foreach ($k in $tokens.Keys) {
    [System.Environment]::SetEnvironmentVariable($k, $tokens[$k], "User")
    Set-Item -Path "env:$k" -Value $tokens[$k]

    if ($k -like "FORGEJO_TOKEN_*") {
        $suffix = $tokens[$k].Substring($tokens[$k].Length - 4)
        Write-Host "  $k = ****$suffix"
    } else {
        Write-Host "  $k = $($tokens[$k])"
    }
}

# ──────────────────────────────────────────────────────────────────────
# Verify
# ──────────────────────────────────────────────────────────────────────

Write-Host ""
Write-Host "=== Verify (read back from User scope) ===" -ForegroundColor Cyan

$allOK = $true
foreach ($k in $tokens.Keys) {
    $stored = [System.Environment]::GetEnvironmentVariable($k, "User")
    if ($stored -eq $tokens[$k]) {
        Write-Host "  $k`: OK (len=$($stored.Length))"
    } else {
        Write-Host "  $k`: MISMATCH (stored len=$($stored.Length))" -ForegroundColor Red
        $allOK = $false
    }
}

Write-Host ""
if ($allOK) {
    Write-Host "✓ All 7 env vars set successfully." -ForegroundColor Green
    Write-Host ""
    Write-Host "Запуск окна:"
    Write-Host "  claude"
    Write-Host "  # в чате:"
    Write-Host "  /work-as-backend             # любая из 5: analyst/backend/frontend/reviewer/qa"
    Write-Host "  # pre-flight выполнится сам через env vars"
    Write-Host "  /loop dynamic                # или другой cadence"
} else {
    Write-Host "✗ Some env vars failed to set." -ForegroundColor Red
    exit 1
}
