#!/usr/bin/env bash
# onx-backup-push-local — yedeği İKİNCİ bir local dizine KOPYALA (ör. 2. disk / RAID / NAS mount).
#
# Önceden: manager local'i no-op sayıyordu ("dosya zaten orada") → config.path'e hiçbir şey
# yazılmıyordu. Artık gerçek kopya: root ile cp (yedekler root:root 0700 → apache kopyalayamaz).
#
# Input (stdin JSON):
#   { "local_path":"/var/backups/onoxsoft/.../backup.tar.gz", "destination_id":N,
#     "config":{ "path":"/mnt/backup2 | /var/backups/onox/..." }, "day":"2026-06-02" }
# Output: {"uploaded":true,"remote_path":"<path>/<day>/<file>","bytes":N,"duration_seconds":N}
# exit: 0=ok 1=bad input 2=preflight 3=io
# Deployed to: /usr/local/onoxsoft/bin/onx-backup-push-local

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "${SCRIPT_DIR}/_lib/common.sh"

require_root
onx_json_input

LOCAL_PATH="$(onx_json_field local_path)"
CONFIG="$(echo "$INPUT" | jq -c '.config // {}')"

[[ -z "$LOCAL_PATH" ]] && onx_die 1 "local_path zorunlu"
[[ ! -f "$LOCAL_PATH" ]] && onx_die 2 "Dosya bulunamadı: ${LOCAL_PATH}"

DEST_DIR="$(onx_json_get "$CONFIG" path '')"
[[ -z "$DEST_DIR" ]] && onx_die 1 "config.path zorunlu"
# Güvenlik: yalnız /var/backups/onox veya /mnt/backup altı (test/prune ile aynı kural).
[[ "$DEST_DIR" =~ ^(/var/backups/onox|/mnt/backup) ]] || onx_die 1 "Güvensiz path: ${DEST_DIR}"

# Per-gün alt-klasör (tarih bazlı düzen + prune tutarlılığı).
DAY="$(onx_json_field day '')"
[[ "$DAY" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]] && DEST_DIR="${DEST_DIR%/}/${DAY}"

FILENAME="$(basename "$LOCAL_PATH")"
DEST_FULL="${DEST_DIR%/}/${FILENAME}"

# Kaynak = hedef (aynı dosya) → no-op (zaten orada; kendine kopyalayıp bozma).
if [[ "$(readlink -f "$LOCAL_PATH" 2>/dev/null)" == "$(readlink -f "$DEST_FULL" 2>/dev/null)" ]]; then
    BYTES=$(stat -c%s "$LOCAL_PATH" 2>/dev/null || echo 0)
    onx_json_out uploaded true remote_path "$DEST_FULL" bytes "$BYTES" duration_seconds 0
    exit 0
fi

mkdir -p "$DEST_DIR" || onx_die 3 "Hedef dizin oluşturulamadı: ${DEST_DIR}"

onx_log "backup-push-local: ${LOCAL_PATH} → ${DEST_FULL}"

START_S=$(date +%s)
cp -f "$LOCAL_PATH" "$DEST_FULL" || onx_die 3 "Kopyalama başarısız: ${DEST_FULL}"
END_S=$(date +%s)
DURATION=$(( END_S - START_S ))
BYTES=$(stat -c%s "$DEST_FULL" 2>/dev/null || echo 0)

[[ "${BYTES}" -le 0 ]] && onx_die 3 "Kopya boş/oluşmadı: ${DEST_FULL}"

onx_json_out uploaded true remote_path "$DEST_FULL" bytes "$BYTES" duration_seconds "$DURATION"
