#!/bin/bash
# Aria Git-Sync - synct Obsidian Vault zu GitHub
# WICHTIG: Nur aria-brain wird automatisch gesynct!
# Andere Repos (Kadi-v2 etc.) werden MANUELL gepusht (Vercel Credits sparen!)
# Laeuft alle 15 Min via systemd Timer

LOG="/var/log/aria-watchdog.log"
GIT_AUTHOR="Kais Aseckzai"
GIT_EMAIL="aseckzai@gmail.com"

# Credentials via Askpass-Helper bei nicht-interaktiven Runs (systemd, cron).
# .env wird vom Helper on-demand gelesen; hier nur den Pfad exportieren.
export GIT_ASKPASS="/root/aria/scripts/git-askpass.sh"
export GIT_TERMINAL_PROMPT=0

# Hard-fail bei undefinierten Variablen, Pipe-Fehler propagieren
set -uo pipefail

log() {
    echo "$(date '+%Y-%m-%d %H:%M:%S') Git-Sync [$1]: $2" >> "$LOG"
}

sync_repo() {
    local name="$1"
    local path="$2"
    local rc=0

    cd "$path" || { log "$name" "cd $path failed"; return 1; }

    # Keine Aenderungen? Skip
    if [ -z "$(git status --porcelain)" ]; then
        return 0
    fi

    git add -A
    # Commit darf "nothing to commit" sagen (exit 1) - das ist OK
    local commit_err
    commit_err=$(git -c user.name="$GIT_AUTHOR" -c user.email="$GIT_EMAIL" \
        commit -m "$name sync: $(date '+%Y-%m-%d %H:%M:%S')" --quiet 2>&1) || true
    if [ -n "$commit_err" ] && ! echo "$commit_err" | grep -q "nothing to commit"; then
        log "$name" "Commit-Warnung: $commit_err"
    fi

    # Pull mit Rebase bevor Push (verhindert Konflikte wenn Remote geaendert)
    local pull_err
    pull_err=$(git pull --rebase --autostash 2>&1)
    rc=$?
    if [ $rc -ne 0 ]; then
        log "$name" "Pull-Rebase fehlgeschlagen (rc=$rc): $pull_err"
        git rebase --abort 2>&1 | head -3 >> "$LOG" || true
        return 1
    fi

    # Push - Fehler nicht mehr verstecken
    local push_err
    push_err=$(git push 2>&1)
    rc=$?
    if [ $rc -eq 0 ]; then
        log "$name" "Push erfolgreich"
    else
        log "$name" "Push fehlgeschlagen (rc=$rc): $push_err"
        return $rc
    fi
}

# NUR Obsidian Vault automatisch syncen (kein Vercel Deploy!)
sync_repo "vault" "/root/aria/brain"
exit $?

# NICHT MEHR AUTOMATISCH SYNCEN (spart Vercel Credits):
# Andere Repos werden nur manuell gepusht wenn eine Aufgabe fertig ist (max 3-4x/Tag).
