#!/usr/bin/env bash
# onx-mariadb-master-setup — MariaDB master replication kurulumu
# Input:  {"repl_user":"replicator","repl_password":"...","server_id":1}
# Output: {"server_id":1,"repl_user":"...","log_file":"mysql-bin.000001","log_pos":12345}

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

require_root
require_cmd mysql
onx_json_input

REPL_USER="$(onx_json_field repl_user 'replicator')"
REPL_PASSWORD="$(onx_json_field repl_password)"
SERVER_ID="$(onx_json_field server_id '1')"
CNF_FILE="/etc/my.cnf.d/onox.cnf"

[[ -z "$REPL_PASSWORD" ]] && onx_die 1 "repl_password zorunlu"
[[ "$SERVER_ID" =~ ^[0-9]+$ ]] || onx_die 1 "Gecersiz server_id: '${SERVER_ID}'"
[[ "$REPL_USER" =~ ^[a-z][a-z0-9_]{0,31}$ ]] || onx_die 1 "Gecersiz repl_user: '${REPL_USER}'"

onx_log "mariadb-master-setup: server_id=${SERVER_ID} repl_user=${REPL_USER}"

# --- /etc/my.cnf.d/onox.cnf güncelle ---
if grep -q '^\[mysqld\]' "$CNF_FILE" 2>/dev/null; then
    # Mevcut dosya var — ilgili satırları ekle/güncelle
    sed -i '/^server-id/d; /^log_bin/d; /^binlog_format/d; /^expire_logs_days/d' "$CNF_FILE"
else
    # Yeni dosya oluştur
    printf '[mysqld]\n' > "$CNF_FILE"
fi

cat >> "$CNF_FILE" <<MYCNF
server-id          = ${SERVER_ID}
log_bin            = mysql-bin
binlog_format      = ROW
expire_logs_days   = 7
MYCNF

# --- Servisi yeniden başlat ---
systemctl restart mariadb || onx_die 3 "MariaDB yeniden başlatılamadı"

# --- Replication kullanıcısını oluştur ---
mysql -e "DROP USER IF EXISTS '${REPL_USER}'@'%';" 2>/dev/null || true
mysql -e "CREATE USER '${REPL_USER}'@'%' IDENTIFIED BY '${REPL_PASSWORD}';" \
    || onx_die 3 "Replication kullanicisi olusturulamadi"
mysql -e "GRANT REPLICATION SLAVE ON *.* TO '${REPL_USER}'@'%';" \
    || onx_die 3 "GRANT REPLICATION SLAVE basarisiz"
mysql -e "FLUSH PRIVILEGES;" || true

# --- Master Status ---
MASTER_STATUS=$(mysql -e "SHOW MASTER STATUS\G" 2>/dev/null) \
    || onx_die 3 "SHOW MASTER STATUS basarisiz"

LOG_FILE=$(echo "$MASTER_STATUS" | grep 'File:' | awk '{print $2}')
LOG_POS=$(echo "$MASTER_STATUS"  | grep 'Position:' | awk '{print $2}')

[[ -z "$LOG_FILE" ]] && onx_die 3 "Binlog log_file alinamadi — log_bin etkin degil olabilir"

json_ok "{\"server_id\":${SERVER_ID},\"repl_user\":\"${REPL_USER}\",\"log_file\":\"${LOG_FILE}\",\"log_pos\":${LOG_POS}}"
