#!/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")"
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)

lftp -u "${USER},${PASS}" "ftp://${HOST}:${PORT}" <<EOF 2>&1
$PASSIVE_SETTING
set ftp:ssl-allow yes
set net:timeout 60
set net:max-retries 3
mkdir -p ${REMOTE_PATH}
put ${LOCAL_PATH} -o ${REMOTE_FULL}
quit
EOF

[[ $? -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"
