#!/usr/bin/env bash
# onx-file-chmod — Dosya/klasör izinlerini değiştir
# Input:  {"paths":["/home/onx_xxx/public_html/index.php"],"mode":"644","recursive":false}
# Output: {"changed":2,"mode":"0644"}

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

require_root
onx_json_input

# ─── Parse input ─────────────────────────────────────────────────────────────
MODE="$(onx_json_field mode)"
RECURSIVE="$(onx_json_get_bool "$INPUT" recursive false)"

[[ -z "$MODE" ]] && onx_die 1 "mode zorunlu"
[[ "$MODE" =~ ^0?[0-7]{3}$ ]] || onx_die 1 "Geçersiz mod: '${MODE}' (octal 3-4 basamak bekleniyor, örn: 755 veya 0755)"

# Normalise to 4-digit octal string
if [[ ${#MODE} -eq 3 ]]; then
    MODE="0${MODE}"
fi

PATHS_JSON="$(printf '%s' "$INPUT" | jq -c '.paths // []')"
mapfile -t PATHS < <(printf '%s' "$PATHS_JSON" | jq -r '.[]')

[[ ${#PATHS[@]} -eq 0 ]] && onx_die 1 "paths dizisi boş"

# ─── Validate and apply ───────────────────────────────────────────────────────
CHANGED=0

for p in "${PATHS[@]}"; do
    real="$(realpath -e "$p" 2>/dev/null)" || onx_die 1 "Path çözümlenemedi: $p"
    [[ "$real" == /home/* ]] || onx_die 1 "Path /home/ dışında: $real"

    if [[ "$RECURSIVE" == "true" && -d "$real" ]]; then
        find "$real" -exec chmod "$MODE" {} \; \
            || onx_die 3 "chmod başarısız (recursive): $real"
        CHANGED=$((CHANGED + $(find "$real" | wc -l)))
    else
        chmod "$MODE" "$real" || onx_die 3 "chmod başarısız: $real"
        CHANGED=$((CHANGED + 1))
    fi
done

onx_log "file-chmod: mode=${MODE} recursive=${RECURSIVE} changed=${CHANGED}"
onx_json_out changed "$CHANGED" mode "$MODE"
