#!/usr/bin/env bash
# onx-backup-push-b2 — Backblaze B2'ye yedek dosyası yükle (S3-compatible API)
#
# Input:
#   {
#     "local_path": "/var/backups/onox/backup.tar.gz",
#     "destination_id": 3,
#     "config": {
#       "endpoint": "https://s3.us-west-002.backblazeb2.com",
#       "region": "us-west-002",
#       "bucket": "my-b2-bucket",
#       "application_key_id": "...",
#       "application_key": "...",
#       "prefix": "onox-backups"
#     }
#   }
# Output: {"uploaded":true, "remote_path":"...", "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-west-002')"
BUCKET="$(onx_json_get "$CONFIG" bucket '')"
APP_KEY_ID="$(onx_json_get "$CONFIG" application_key_id '')"
APP_KEY="$(onx_json_get "$CONFIG" application_key '')"
PREFIX="$(onx_json_get "$CONFIG" prefix '')"

[[ -z "$BUCKET" ]]    && onx_die 1 "config.bucket zorunlu"
[[ -z "$APP_KEY_ID" ]] && onx_die 1 "config.application_key_id zorunlu"
[[ -z "$APP_KEY" ]]   && onx_die 1 "config.application_key zorunlu"
[[ -z "$ENDPOINT" ]]  && ENDPOINT="https://s3.${REGION}.backblazeb2.com"

FILENAME="$(basename "$LOCAL_PATH")"
REMOTE_KEY="${PREFIX:+${PREFIX}/}${FILENAME}"

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

START_S=$(date +%s)

AWS_ACCESS_KEY_ID="$APP_KEY_ID" \
AWS_SECRET_ACCESS_KEY="$APP_KEY" \
AWS_DEFAULT_REGION="$REGION" \
aws s3 cp "$LOCAL_PATH" "s3://${BUCKET}/${REMOTE_KEY}" \
    --endpoint-url="$ENDPOINT" \
    --no-progress 2>&1 \
    || onx_die 3 "B2 upload başarısız: ${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"
