#!/usr/bin/env bash
# onx-cpanel-extract — cPanel pkgacct tar.gz listele veya çıkar
# Input:  {"tar_path":"/path/to/cpmove.tar.gz","work_dir":"/tmp/onx_cpanel_xxx","mode":"list|extract"}
# Output: {"file_count":1234,"size_bytes":123456789,"work_dir":"...", "mode":"..."}

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

require_root
require_cmd tar
onx_json_input

# ─── Parse input ─────────────────────────────────────────────────────────────
TAR_PATH="$(onx_json_field tar_path)"
WORK_DIR="$(onx_json_field work_dir)"
MODE="$(onx_json_field mode 'list')"

[[ -z "$TAR_PATH" ]] && onx_die 1 "tar_path zorunlu"

TAR_REAL="$(realpath -e "$TAR_PATH" 2>/dev/null)" \
    || onx_die 1 "Tar dosyası bulunamadı: $TAR_PATH"

[[ "$TAR_REAL" == /home/* || "$TAR_REAL" == /var/lib/onox/* ]] \
    || onx_die 1 "tar_path güvenli alanda değil (beklenen: /home/* veya /var/lib/onox/*): $TAR_REAL"

[[ -f "$TAR_REAL" ]] || onx_die 1 "tar_path bir dosya değil: $TAR_REAL"

# ─── List mode ───────────────────────────────────────────────────────────────
if [[ "$MODE" == "list" ]]; then
    FILE_COUNT="$(tar -tzf "$TAR_REAL" 2>/dev/null | wc -l || echo 0)"
    SIZE_BYTES="$(stat -c%s "$TAR_REAL" 2>/dev/null || echo 0)"

    onx_log "cpanel-extract: mode=list tar=${TAR_REAL} files=${FILE_COUNT} size=${SIZE_BYTES}"
    json_ok "{\"file_count\":${FILE_COUNT},\"size_bytes\":${SIZE_BYTES},\"mode\":\"list\"}"
fi

# ─── Extract mode ────────────────────────────────────────────────────────────
[[ -z "$WORK_DIR" ]] && onx_die 1 "work_dir zorunlu (mode=extract)"

# Validate work_dir is under /tmp or /var/lib/onox/migrations/
WORK_PARENT="$(dirname "$WORK_DIR")"
if [[ "$WORK_PARENT" != /tmp* && "$WORK_PARENT" != /var/lib/onox/* ]]; then
    onx_die 1 "work_dir güvenli alanda değil: $WORK_DIR"
fi

mkdir -p "$WORK_DIR" || onx_die 3 "work_dir oluşturulamadı: $WORK_DIR"

FILE_COUNT="$(tar -tzvf "$TAR_REAL" 2>/dev/null | wc -l || echo 0)"
SIZE_BYTES="$(stat -c%s "$TAR_REAL" 2>/dev/null || echo 0)"

tar -xzf "$TAR_REAL" -C "$WORK_DIR" \
    || onx_die 3 "tar extract başarısız: $TAR_REAL"

onx_log "cpanel-extract: mode=extract tar=${TAR_REAL} work_dir=${WORK_DIR} files=${FILE_COUNT}"
json_ok "{\"file_count\":${FILE_COUNT},\"size_bytes\":${SIZE_BYTES},\"work_dir\":\"${WORK_DIR}\",\"mode\":\"extract\"}"
