#!/usr/bin/env bash
# onx-db-restart — systemctl restart mariadb / mysqld
#
# Aktif DB servisini tespit eder (mariadb veya mysqld), restart eder.
# Restart süresi (downtime) ölçülür ve dönülür.
#
# Input:  {} (bos obje kabul edilir)
# Output: {"restarted":true, "service":"mariadb|mysqld", "downtime_seconds":N}
# Exit:   0=ok, 1=invalid-input, 2=preflight-fail, 3=exec-fail

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

require_root
require_cmd systemctl
onx_json_input

# Aktif DB servisini tespit et
SERVICE=""
for candidate in mariadb mysqld mysql; do
    if systemctl list-unit-files --type=service 2>/dev/null | grep -qE "^${candidate}\.service"; then
        SERVICE="${candidate}"
        break
    fi
done

[[ -z "${SERVICE}" ]] && onx_die 2 "DB servisi bulunamadi (mariadb/mysqld/mysql)"

onx_log "db-restart: ${SERVICE} servisi yeniden baslatiliyor"

START_TS=$(date +%s)
if ! systemctl restart "${SERVICE}"; then
    onx_die 3 "systemctl restart ${SERVICE} basarisiz"
fi

# Aktif olana kadar 30sn bekle (timeout)
TIMEOUT=30
WAITED=0
while ! systemctl is-active --quiet "${SERVICE}"; do
    sleep 1
    WAITED=$((WAITED + 1))
    if [[ ${WAITED} -ge ${TIMEOUT} ]]; then
        onx_die 3 "${SERVICE} restart sonrasi ${TIMEOUT}sn icinde aktif olamadi"
    fi
done

END_TS=$(date +%s)
DOWNTIME=$((END_TS - START_TS))

onx_log "db-restart: ${SERVICE} aktif (downtime ${DOWNTIME}sn)"

json_ok "{\"restarted\":true,\"service\":\"${SERVICE}\",\"downtime_seconds\":${DOWNTIME}}"
