#!/usr/bin/env bash
# onx-backup-push-s3 — S3/Wasabi'ye yedek dosyası yükle (aws s3 cp)
#
# Input:
#   {
#     "local_path": "/var/backups/onox/backup_20260513.tar.gz",
#     "destination_id": 5,
#     "config": {
#       "endpoint": "https://...",     # optional for AWS, required for Wasabi
#       "region": "eu-central-1",
#       "bucket": "my-bucket",
#       "access_key": "...",
#       "secret_key": "...",
#       "prefix": "onox-backups"       # optional
#     }
#   }
# Output:
#   {"uploaded":true, "remote_path":"onox-backups/backup_20260513.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 aws
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}"

ENDPOINT="$(onx_json_get "$CONFIG" endpoint '')"
REGION="$(onx_json_get "$CONFIG" region 'us-east-1')"
BUCKET="$(onx_json_get "$CONFIG" bucket '')"
ACCESS_KEY="$(onx_json_get "$CONFIG" access_key '')"
SECRET_KEY="$(onx_json_get "$CONFIG" secret_key '')"
PREFIX="$(onx_json_get "$CONFIG" prefix '')"

[[ -z "$BUCKET" ]]     && onx_die 1 "config.bucket zorunlu"
[[ -z "$ACCESS_KEY" ]] && onx_die 1 "config.access_key zorunlu"
[[ -z "$SECRET_KEY" ]] && onx_die 1 "config.secret_key zorunlu"

FILENAME="$(basename "$LOCAL_PATH")"
if [[ -n "$PREFIX" ]]; then
    REMOTE_KEY="${PREFIX}/${FILENAME}"
else
    REMOTE_KEY="$FILENAME"
fi

ENDPOINT_ARG=""
[[ -n "$ENDPOINT" ]] && ENDPOINT_ARG="--endpoint-url=${ENDPOINT}"

onx_log "backup-push-s3: ${LOCAL_PATH} → s3://${BUCKET}/${REMOTE_KEY}"

START_S=$(date +%s)

AWS_ACCESS_KEY_ID="$ACCESS_KEY" \
AWS_SECRET_ACCESS_KEY="$SECRET_KEY" \
AWS_DEFAULT_REGION="$REGION" \
aws s3 cp "$LOCAL_PATH" "s3://${BUCKET}/${REMOTE_KEY}" \
    $ENDPOINT_ARG \
    --no-progress 2>&1 \
    || onx_die 3 "S3 upload başarısız: s3://${BUCKET}/${REMOTE_KEY}"

END_S=$(date +%s)
DURATION=$(( END_S - START_S ))
BYTES=$(stat -c%s "$LOCAL_PATH" 2>/dev/null || echo 0)

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