#!/usr/bin/env bash
# onx-mariadb-rebuild — mariabackup ile slave'i sıfırdan senkronize et
# Input:  {"master_host":"10.0.0.1","repl_user":"replicator","repl_password":"..."}
# Output: {"rebuilt":true,"gtid_pos":"..."}

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

require_root
require_cmd mariabackup
require_cmd mysql
onx_json_input

MASTER_HOST="$(onx_json_field master_host)"
REPL_USER="$(onx_json_field repl_user 'replicator')"
REPL_PASSWORD="$(onx_json_field repl_password)"
BACKUP_DIR="/tmp/onx-mariabackup-$(date +%s)"

[[ -z "$MASTER_HOST" ]]   && onx_die 1 "master_host zorunlu"
[[ -z "$REPL_PASSWORD" ]] && onx_die 1 "repl_password zorunlu"

onx_log "mariadb-rebuild: master=${MASTER_HOST} backup_dir=${BACKUP_DIR}"

# 1 — Slave'i durdur
mysql -e "STOP SLAVE;" 2>/dev/null || true
systemctl stop mariadb || onx_die 3 "MariaDB durdurulamadi"

# 2 — Tam yedek al (streaming)
mkdir -p "$BACKUP_DIR"
mariabackup --backup \
    --host="${MASTER_HOST}" \
    --user="${REPL_USER}" \
    --password="${REPL_PASSWORD}" \
    --target-dir="${BACKUP_DIR}" \
    || onx_die 3 "mariabackup --backup basarisiz"

# 3 — Prepare
mariabackup --prepare --target-dir="${BACKUP_DIR}" \
    || onx_die 3 "mariabackup --prepare basarisiz"

# 4 — Datadir'i temizle ve restore et
DATADIR=$(mysql -e "SELECT @@datadir;" 2>/dev/null | tail -1 || echo "/var/lib/mysql")
rm -rf "${DATADIR:?}"/*

mariabackup --copy-back --target-dir="${BACKUP_DIR}" \
    || onx_die 3 "mariabackup --copy-back basarisiz"

chown -R mysql:mysql "$DATADIR"

# 5 — Servisi başlat
systemctl start mariadb || onx_die 3 "MariaDB baslatılamadi"

# 6 — GTID pozisyonunu al
GTID_POS=$(mysql -e "SELECT @@gtid_slave_pos;" 2>/dev/null | tail -1 || echo "")
GTID_JSON=$(printf '%s' "${GTID_POS:-}" | jq -Rs '.')

rm -rf "$BACKUP_DIR"

onx_log "mariadb-rebuild: tamamlandi gtid_pos=${GTID_POS}"
json_ok "{\"rebuilt\":true,\"gtid_pos\":${GTID_JSON}}"
