#!/bin/sh
set -eu
# Faz 1: şema + boş site_settings (prod-bootstrap.sql; vitrin içerik seed’i yok — panel tek kaynak).
# Demo verisi (yerel): api/scripts/dev-demo-seed.sql — bu script tarafından çalıştırılmaz.
# Faz 2: vitrin için zorunlu routes + site_pages layout kolonları (ayrı dosya; faz 1 yarım kalsa da uygulanır).
# Faz 3: favori / shop_sessions / product_reviews (Root Directory=api Docker imajında database/ olmayabilir).
# Faz 4: database/migration_*.sql zinciri (Railway UI’da shell yoksa redeploy ile uygulanır). Kapatmak: FAUNAMIX_RUN_DB_MIGRATIONS=0
#
# Hatasız ilerleme disiplini:
# 1) Railway deploy logunda faz 1 stderr var mı bakın; varsa prod-bootstrap.sql’deki ifadeyi düzeltin (atlama yok).
# 2) Şema tek doğruluk kaynağı: ./scripts/run-database-migrations.sh — üretim DB’yi en az bir kez bu zincirle eşitlemek en sağlamı.
# 3) Faz 2, faz 1’in güvenlik filesıdır; faz 1’in yeşil olması hedef.

if [ "${FAUNAMIX_AUTO_BOOTSTRAP:-1}" = "0" ]; then
  echo "[bootstrap] skipped (FAUNAMIX_AUTO_BOOTSTRAP=0)"
  exit 0
fi

DB_HOST_VAL="${DB_HOST:-${MYSQL_HOST:-}}"
DB_PORT_VAL="${DB_PORT:-${MYSQL_PORT:-3306}}"
DB_NAME_VAL="${DB_NAME:-${MYSQL_DATABASE:-}}"
DB_USER_VAL="${DB_USER:-${MYSQL_USER:-}}"
DB_PASS_VAL="${DB_PASS:-${MYSQL_PASSWORD:-${MYSQL_ROOT_PASSWORD:-}}}"

if [ -z "${DB_HOST_VAL}" ] || [ -z "${DB_NAME_VAL}" ] || [ -z "${DB_USER_VAL}" ]; then
  echo "[bootstrap] skipped (missing DB env vars)"
  exit 0
fi

if ! command -v mysql >/dev/null 2>&1; then
  echo "[bootstrap] skipped (mysql client not installed)"
  exit 0
fi

BOOTSTRAP_SQL="${FAUNAMIX_BOOTSTRAP_SQL_PATH:-/app/api/scripts/prod-bootstrap.sql}"
if [ ! -f "${BOOTSTRAP_SQL}" ]; then
  echo "[bootstrap] skipped (sql file not found: ${BOOTSTRAP_SQL})"
  exit 0
fi

run_mysql_sql_file() {
  _sql="$1"
  _err="$(mktemp)"
  MYSQL_PWD="${DB_PASS_VAL}" mysql -h "${DB_HOST_VAL}" -P "${DB_PORT_VAL}" -u "${DB_USER_VAL}" --protocol=TCP -D "${DB_NAME_VAL}" --default-character-set=utf8mb4 --show-warnings < "${_sql}" 2>"${_err}"
  _code=$?
  if [ "${_code}" -ne 0 ]; then
    echo "[bootstrap] MySQL çıkış ${_code}, stderr:"
    cat "${_err}"
    rm -f "${_err}"
    return "${_code}"
  fi
  if grep -q '^ERROR ' "${_err}" 2>/dev/null; then
    echo "[bootstrap] MySQL çıkış 0 ama stderr’de ERROR satırı var (başarısız sayılıyor):"
    cat "${_err}"
    rm -f "${_err}"
    return 1
  fi
  rm -f "${_err}"
  return 0
}

echo "[bootstrap] phase 1: main ${BOOTSTRAP_SQL} on ${DB_HOST_VAL}:${DB_PORT_VAL}/${DB_NAME_VAL}"
if run_mysql_sql_file "${BOOTSTRAP_SQL}"; then
  echo "[bootstrap] phase 1: completed"
else
  echo "[bootstrap] phase 1: failed (MySQL çıkış kodu $? — devam ediliyor; faz 2 yine çalışır)"
fi

ROUTING_SQL="${FAUNAMIX_BOOTSTRAP_ROUTING_SQL_PATH:-/app/api/scripts/prod-bootstrap-routing.sql}"
if [ -f "${ROUTING_SQL}" ]; then
  echo "[bootstrap] phase 2: routing ${ROUTING_SQL}"
  if run_mysql_sql_file "${ROUTING_SQL}"; then
    echo "[bootstrap] phase 2: completed"
  else
    echo "[bootstrap] phase 2: failed (MySQL çıkış kodu $?)"
  fi
else
  echo "[bootstrap] phase 2: skipped (file not found: ${ROUTING_SQL})"
fi

COMMERCE_SQL="${FAUNAMIX_BOOTSTRAP_COMMERCE_SQL_PATH:-/app/api/scripts/prod-bootstrap-commerce.sql}"
if [ -f "${COMMERCE_SQL}" ]; then
  echo "[bootstrap] phase 3: commerce (wishlist, sessions, reviews) ${COMMERCE_SQL}"
  if run_mysql_sql_file "${COMMERCE_SQL}"; then
    echo "[bootstrap] phase 3: completed"
  else
    echo "[bootstrap] phase 3: failed (MySQL çıkış kodu $? — vitrin favori/yorum çalışmayabilir)"
  fi
else
  echo "[bootstrap] phase 3: skipped (file not found: ${COMMERCE_SQL})"
fi

if [ "${FAUNAMIX_RUN_DB_MIGRATIONS:-1}" != "0" ]; then
  MIGRATE_SCRIPT="${FAUNAMIX_MIGRATE_SCRIPT_PATH:-/app/scripts/run-database-migrations.sh}"
  if [ -f "${MIGRATE_SCRIPT}" ] && command -v bash >/dev/null 2>&1; then
    echo "[bootstrap] phase 4: migration chain ${MIGRATE_SCRIPT}"
    _mig_log="$(mktemp)"
    _mig_exit=0
    # env(1) bazı özel karakterli şifrelerde sessizce başarısız olabiliyor; export + subshell güvenli.
    (
      export FAUNAMIX_MIGRATE_FROM_ENV=1
      export FAUNAMIX_SKIP_SCHEMA_SQL=1
      export DB_HOST="${DB_HOST_VAL}"
      export DB_PORT="${DB_PORT_VAL}"
      export DB_NAME="${DB_NAME_VAL}"
      export DB_USER="${DB_USER_VAL}"
      export DB_PASS="${DB_PASS_VAL}"
      if [ "${FAUNAMIX_MIGRATE_DEBUG:-}" = "1" ]; then
        exec bash --noprofile --norc -x "${MIGRATE_SCRIPT}"
      else
        exec bash --noprofile --norc "${MIGRATE_SCRIPT}"
      fi
    ) >"${_mig_log}" 2>&1 || _mig_exit=$?
    if [ ! -s "${_mig_log}" ]; then
      echo "[migrate] (çıktı yok — migration betiği çalışmadı veya anında çıktı; exit ${_mig_exit})"
      echo "[migrate] teşhis: bash=$(command -v bash 2>/dev/null || echo yok) betik=$(wc -c <"${MIGRATE_SCRIPT}" 2>/dev/null || echo 0) bayt database=$(test -d /app/database && echo var || echo yok)"
    fi
    while IFS= read -r _line; do
      echo "[migrate] ${_line}"
    done < "${_mig_log}"
    if [ "${_mig_exit}" -eq 0 ] || grep -q 'Tamam: tüm sıralı migration' "${_mig_log}" 2>/dev/null; then
      rm -f "${_mig_log}"
      echo "[bootstrap] phase 4: completed"
    else
      rm -f "${_mig_log}"
      echo "[bootstrap] phase 4: failed (exit ${_mig_exit} — yukarıdaki [migrate] satırlarına bakın; şema migration zinciri eksik kalmış olabilir)"
    fi
  else
    echo "[bootstrap] phase 4: skipped (bash veya ${MIGRATE_SCRIPT} yok)"
  fi
else
  echo "[bootstrap] phase 4: skipped (FAUNAMIX_RUN_DB_MIGRATIONS=0)"
fi
