#!/usr/bin/env bash
# onx-backup-push-ftp — FTP sunucusuna yedek dosyası yükle (lftp)
#
# Input:
#   {
#     "local_path": "/var/backups/onox/backup.tar.gz",
#     "destination_id": 4,
#     "config": {
#       "host": "ftp.example.com",
#       "port": 21,
#       "username": "ftpuser",
#       "password": "secret",
#       "remote_path": "/backup/server1",
#       "passive": true
#     }
#   }
# Output: {"uploaded":true, "remote_path":"/backup/server1/backup.tar.gz", "bytes":N, "duration_seconds":N}

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

require_root
require_cmd lftp
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}"

HOST="$(onx_json_get "$CONFIG" host '')"
PORT="$(onx_json_get "$CONFIG" port '21')"
USER="$(onx_json_get "$CONFIG" username '')"
PASS="$(onx_json_get "$CONFIG" password '')"
REMOTE_PATH="$(onx_json_get "$CONFIG" remote_path '/backup')"
PASSIVE="$(onx_json_get "$CONFIG" passive 'true')"

[[ -z "$HOST" ]] && onx_die 1 "config.host zorunlu"
[[ -z "$USER" ]] && onx_die 1 "config.username zorunlu"
[[ -z "$PASS" ]] && onx_die 1 "config.password zorunlu"

FILENAME="$(basename "$LOCAL_PATH")"
# NOT: FTP'de per-gün alt-klasör YOK — FTP prune düz dizinde yaş-bazlı çalışır (cls -l,
# non-recursive); tarih klasörü prune'u körleştirir. Düz layout = doğru retention.
REMOTE_FULL="${REMOTE_PATH}/${FILENAME}"
BYTES=$(stat -c%s "$LOCAL_PATH" 2>/dev/null || echo 0)

PASSIVE_SETTING="set ftp:passive-mode yes"
[[ "$PASSIVE" == "false" ]] && PASSIVE_SETTING="set ftp:passive-mode no"

onx_log "backup-push-ftp: ${LOCAL_PATH} → ftp://${HOST}:${PORT}${REMOTE_FULL}"

START_S=$(date +%s)

# Parola env ile ('lftp -u user,pass' virgüllü/özel karakterli parolada bozulurdu).
# cmd:fail-exit yes → put/mkdir başarısızsa lftp NON-ZERO döner (sessiz 'başarılı' bug'ı kapanır).
LFTP_PASSWORD="$PASS" lftp -u "$USER" --env-password "ftp://${HOST}:${PORT}" <<EOF 2>&1
set cmd:fail-exit yes
$PASSIVE_SETTING
set ftp:ssl-allow yes
set net:timeout 60
set net:max-retries 3
mkdir -p -f "${REMOTE_PATH}"
put "${LOCAL_PATH}" -o "${REMOTE_FULL}"
quit
EOF
RC=$?

[[ $RC -ne 0 ]] && onx_die 3 "FTP yükleme başarısız: ftp://${HOST}:${PORT}${REMOTE_FULL}"

END_S=$(date +%s)
DURATION=$(( END_S - START_S ))

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