# niikn-kb-sync.ps1 — автосинхронизация базы знаний НИИКН с Gitea
# Запускается Scheduled Task каждые ~7 минут. Тянет изменения с сервера,
# коммитит локальные правки и отправляет обратно. Лог: niikn-kb-sync.log
$ErrorActionPreference = "Continue"
$base = "C:\Users\msi\Documents\niikn-knowledge-base"
$git  = "C:\Program Files\Git\cmd\git.exe"
$log  = "$base\niikn-kb-sync.log"

function Log($m) { "$([DateTime]::Now.ToString('yyyy-MM-dd HH:mm:ss'))  $m" | Add-Content -Path $log -Encoding UTF8 }

# mutex — не запускать второй экземпляр
$mtx = New-Object System.Threading.Mutex($false, "niikn-kb-sync")
if (-not $mtx.WaitOne(0)) { exit 0 }

try {
    Set-Location $base
    # подтянуть с сервера (rebase, чтобы не плодить merge-коммиты)
    & $git pull --rebase --autostash origin main 2>&1 | Out-Null
    # есть ли локальные изменения?
    $status = & $git status --porcelain
    if ($status) {
        & $git add -A 2>&1 | Out-Null
        & $git commit -m "auto-sync $([DateTime]::Now.ToString('yyyy-MM-dd HH:mm'))" 2>&1 | Out-Null
        Log "committed local changes"
    }
    # отправить (если есть что)
    $push = & $git push origin main 2>&1
    if ($LASTEXITCODE -eq 0) { Log "sync ok" } else { Log "push issue: $push" }
}
catch { Log "ERROR: $_" }
finally { $mtx.ReleaseMutex() }
