#!/usr/bin/env bash
# Usage: ./install.sh example.com blog|news [--change-template]

set -Eeuo pipefail

DOMAIN="${1:-}"
THEME_TYPE="${2:-}"
CHANGE_THEME=0
REINSTALL_PLUGIN=0

# Проверка параметров
for arg in "$@"; do
  if [[ "${arg}" == "--change-template" ]]; then
    CHANGE_THEME=1
  elif [[ "${arg}" == "--reinstall-mbc-populate" ]]; then
    REINSTALL_PLUGIN=1
  fi
done

if [[ -z "${DOMAIN}" || -z "${THEME_TYPE}" ]]; then
  echo "Usage: $0 <domain.tld> <blog|news> [--change-template] [--reinstall-mbc-populate]"
  echo "  --change-template       Change theme for already installed site"
  echo "  --reinstall-mbc-populate  Reinstall mbc-populate plugin (download and activate)"
  exit 1
fi

if [[ "${THEME_TYPE}" != "blog" && "${THEME_TYPE}" != "news" ]]; then
  echo "Theme type must be: blog or news"
  exit 1
fi

# Уникальный путь для каждого домена (заменяем точки на дефисы для безопасности)
DOMAIN_SAFE="${DOMAIN//./-}"
WP_PATH="/var/www/${DOMAIN_SAFE}"
TMP_DIR="/tmp"
DATA_BASE="https://data.mbcproj.com"

# Уникальное имя базы данных для каждого домена
DB_NAME_SAFE="${DOMAIN//./_}"
WORDPRESS_DB_NAME="wp_${DB_NAME_SAFE}"
WORDPRESS_DB_USER="wp_${DB_NAME_SAFE}"

export SDOMAIN="${DOMAIN}"
export WORDPRESS_DB_NAME="${WORDPRESS_DB_NAME}"
export WORDPRESS_DB_USER="${WORDPRESS_DB_USER}"
export WORDPRESS_DB_PASSWORD="megabraincrew"
export WORDPRESS_ADMIN_USER="megabraincrew"
export WORDPRESS_ADMIN_PASSWORD="Mega2026BrainCrew"
export WORDPRESS_ADMIN_EMAIL="webmaster@mbcproj.com"
export WORDPRESS_URL="https://${DOMAIN}"
export WORDPRESS_SITE_TITLE="mbcproj"
export WORDPRESS_PATH="${WP_PATH}"

### Pretty output
if [[ -t 1 ]]; then
  C_RESET=$'\033[0m'
  C_BOLD=$'\033[1m'
  C_GREEN=$'\033[32m'
  C_YELLOW=$'\033[33m'
  C_RED=$'\033[31m'
  C_BLUE=$'\033[34m'
  C_DIM=$'\033[2m'
else
  C_RESET=""; C_BOLD=""; C_GREEN=""; C_YELLOW=""; C_RED=""; C_BLUE=""; C_DIM=""
fi

log_step() { echo -e "${C_BLUE}${C_BOLD}==>${C_RESET} $*"; }
log_ok()   { echo -e "${C_GREEN}${C_BOLD}✔${C_RESET} $*"; }
log_warn() { echo -e "${C_YELLOW}${C_BOLD}⚠${C_RESET} $*"; }
log_err()  { echo -e "${C_RED}${C_BOLD}✖${C_RESET} $*"; }

on_error() {
  local exit_code=$?
  log_err "Error on line ${BASH_LINENO[0]}: ${BASH_COMMAND}"
  exit "${exit_code}"
}
trap on_error ERR

### Progress bar
# TOTAL_STEPS будет установлен после проверки режима CHANGE_THEME
TOTAL_STEPS=18
CURRENT_STEP=0
progress() {
  local msg="${1:-}"
  CURRENT_STEP=$((CURRENT_STEP + 1))
  local width=28
  local filled=$(( CURRENT_STEP * width / TOTAL_STEPS ))
  local empty=$(( width - filled ))
  local bar
  bar="$(printf "%0.s#" $(seq 1 "${filled}" 2>/dev/null || true))"
  bar="${bar}$(printf "%0.s-" $(seq 1 "${empty}" 2>/dev/null || true))"
  printf "\r${C_BOLD}[%-${width}s] %3d%%${C_RESET} ${C_DIM}%s${C_RESET}\n" \
    "${bar}" "$(( CURRENT_STEP * 100 / TOTAL_STEPS ))" "${msg}"
}

need_cmd() { command -v "$1" >/dev/null 2>&1; }

ensure_packages_apt() {
  # Installs missing packages if apt-get exists (Debian/Ubuntu)
  local pkgs=("$@")
  if ! need_cmd apt-get; then
    return 0
  fi

  local to_install=()
  for p in "${pkgs[@]}"; do
    dpkg -s "$p" >/dev/null 2>&1 || to_install+=("$p")
  done

  if (( ${#to_install[@]} > 0 )); then
    log_step "Installing missing packages: ${to_install[*]}"
    export DEBIAN_FRONTEND=noninteractive
    apt-get update -y >/dev/null
    apt-get install -y "${to_install[@]}" >/dev/null
    log_ok "Packages installed: ${to_install[*]}"
  fi
}

download() {
  local url="$1" out="$2"
  if need_cmd curl; then
    curl -fsSL "$url" -o "$out"
  else
    wget -qO "$out" "$url"
  fi
}

wpcli() { wp --path="${WP_PATH}" --allow-root "$@"; }

install_zip_theme() {
  local url="$1"
  local zip="${TMP_DIR}/$(basename "$url")"
  download "$url" "$zip"
  unzip -oq "$zip" -d "${WP_PATH}/wp-content/themes/"
}

install_and_configure_theme() {
  local theme_type="$1"
  
  progress "Installing and activating random theme (${theme_type})"
  rm -rf "${WP_PATH}/wp-content/themes/twentytwentyone" \
         "${WP_PATH}/wp-content/themes/twentytwentytwo" \
         "${WP_PATH}/wp-content/themes/twentytwentythree" \
         "${WP_PATH}/wp-content/themes/hovercraft" 2>/dev/null || true

  if [[ "${theme_type}" == "blog" ]]; then
    case "$(shuf -i1-4 -n1)" in
      1) install_zip_theme "${DATA_BASE}/themes/blog/refine-blog.zip"
         install_zip_theme "${DATA_BASE}/themes/blog/excellent-blog.zip"
         wpcli theme activate excellent-blog 2>/dev/null || true
         THEME_SELECTED="excellent-blog (+refine-blog)" ;;
      2) install_zip_theme "${DATA_BASE}/themes/blog/refine-blog.zip"
         wpcli theme activate refine-blog 2>/dev/null || true
         THEME_SELECTED="refine-blog" ;;
      3) install_zip_theme "${DATA_BASE}/themes/blog/graceful.zip"
         wpcli theme activate graceful 2>/dev/null || true
         THEME_SELECTED="graceful" ;;
      4) install_zip_theme "${DATA_BASE}/themes/blog/kortez-blog.zip"
         wpcli theme activate kortez-blog 2>/dev/null || true
         THEME_SELECTED="kortez-blog" ;;
    esac
  else
    case "$(shuf -i1-8 -n1)" in
      1) install_zip_theme "${DATA_BASE}/themes/news/ai-news.zip"
         wpcli theme activate ai-news 2>/dev/null || true
         THEME_SELECTED="ai-news" ;;
      2) install_zip_theme "${DATA_BASE}/themes/news/news-box.zip"
         install_zip_theme "${DATA_BASE}/themes/news/news-box-plus.zip"
         wpcli theme activate news-box-plus 2>/dev/null || true
         THEME_SELECTED="news-box-plus (+news-box)" ;;
      3) install_zip_theme "${DATA_BASE}/themes/news/news-box.zip"
         wpcli theme activate news-box 2>/dev/null || true
         THEME_SELECTED="news-box" ;;
      4) install_zip_theme "${DATA_BASE}/themes/news/newspaperss.zip"
         install_zip_theme "${DATA_BASE}/themes/news/news-press.zip"
         wpcli theme activate news-press 2>/dev/null || true
         THEME_SELECTED="news-press (+newspaperss)" ;;
      5) install_zip_theme "${DATA_BASE}/themes/news/newspaperss.zip"
         wpcli theme activate newspaperss 2>/dev/null || true
         THEME_SELECTED="newspaperss" ;;
      6) install_zip_theme "${DATA_BASE}/themes/news/newsup.zip"
         install_zip_theme "${DATA_BASE}/themes/news/newsgine.zip"
         wpcli theme activate newsgine 2>/dev/null || true
         THEME_SELECTED="newsgine (+newsup)" ;;
      7) install_zip_theme "${DATA_BASE}/themes/news/newsup.zip"
         wpcli theme activate newsup 2>/dev/null || true
         THEME_SELECTED="newsup" ;;
      8) install_zip_theme "${DATA_BASE}/themes/news/newspaper-eye.zip"
         wpcli theme activate newspaper-eye 2>/dev/null || true
         THEME_SELECTED="newspaper-eye" ;;
    esac
  fi
  log_ok "Theme activated: ${THEME_SELECTED}"
}

http_check() {
  local url="$1"
  local timeout="${2:-10}"
  local retries="${3:-30}"

  if ! need_cmd curl && ! need_cmd wget; then
    log_warn "curl/wget not found; skipping HTTP availability check"
    return 0
  fi

  log_step "Checking site availability: ${url}"
  local i code ok=0
  for i in $(seq 1 "${retries}"); do
    if need_cmd curl; then
      code="$(curl -k -sS -o /dev/null -m "${timeout}" -w "%{http_code}" "${url}" || true)"
    else
      if wget -q --server-response --spider --timeout="${timeout}" "${url}" >/dev/null 2>&1; then
        code="200"
      else
        code="000"
      fi
    fi

    if [[ "${code}" =~ ^2|^3 ]]; then
      ok=1
      break
    fi

    printf "${C_DIM}  attempt %d/%d -> HTTP %s, waiting...${C_RESET}\n" "$i" "${retries}" "${code}"
    sleep 2
  done

  if [[ "${ok}" -eq 1 ]]; then
    log_ok "Site is reachable (HTTP ${code})"
    return 0
  fi

  log_warn "Site is NOT reachable after ${retries} attempts (last HTTP ${code}). Check DNS/SSL/Nginx."
  return 1
}

### =========================
### Step 1: Preflight + deps
### =========================
progress "Preflight checks & dependencies"
# wget обычно есть (ты им запускаешь), но curl может не быть.
# unzip нужен для тем.
ensure_packages_apt ca-certificates unzip curl
need_cmd unzip || { log_err "unzip not found (install it: apt-get install -y unzip)"; exit 1; }
(need_cmd curl || need_cmd wget) || { log_err "Need curl or wget"; exit 1; }
log_ok "Tools OK (unzip, curl/wget)"

# Если режим смены темы или переустановки плагина, проверяем что сайт установлен
if [[ "${CHANGE_THEME}" -eq 1 ]] || [[ "${REINSTALL_PLUGIN}" -eq 1 ]]; then
  if [[ ! -f "${WP_PATH}/wp-config.php" ]]; then
    log_err "WordPress not found at ${WP_PATH}. Site must be installed first."
    exit 1
  fi
  if ! wpcli core is-installed >/dev/null 2>&1; then
    log_err "WordPress is not installed. Run installation first without --change-template or --reinstall-mbc-populate."
    exit 1
  fi
  if [[ "${CHANGE_THEME}" -eq 1 ]]; then
    log_ok "WordPress installation found, proceeding with theme change"
    TOTAL_STEPS=5
  elif [[ "${REINSTALL_PLUGIN}" -eq 1 ]]; then
    log_ok "WordPress installation found, proceeding with plugin reinstall"
    # 1 шаг уже выполнен (Preflight), осталось 3 шага для переустановки плагина
    TOTAL_STEPS=4
  fi
else
  # Обычная установка - добавляем шаг для PHP настроек
  TOTAL_STEPS=19
fi

### =========================
### Install WordPress (automated script)
### =========================
if [[ "${CHANGE_THEME}" -eq 0 ]] && [[ "${REINSTALL_PLUGIN}" -eq 0 ]]; then
  # Обычная установка - устанавливаем WordPress
  progress "Installing WordPress (automated script)"
  download "${DATA_BASE}/wp-install" "${TMP_DIR}/wp-install"
  bash "${TMP_DIR}/wp-install"
  log_ok "WordPress installed"

  # wp-cli should exist after installer (если нет — это проблема инсталлятора/пути)
  if ! need_cmd wp; then
    log_err "wp-cli not found AFTER wp-install. Installer didn't install it or PATH not updated."
    log_err "Check: ls -la /usr/local/bin/wp /usr/bin/wp; echo \$PATH"
    exit 1
  fi
  log_ok "wp-cli found: $(command -v wp)"
else
  # В режиме смены темы или переустановки плагина проверяем наличие wp-cli
  if ! need_cmd wp; then
    log_err "wp-cli not found. Install it first."
    exit 1
  fi
  log_ok "wp-cli found: $(command -v wp)"
fi

### PHP Configuration (always apply, except when only reinstalling plugin)
if [[ "${REINSTALL_PLUGIN}" -eq 0 ]] || [[ "${CHANGE_THEME}" -eq 1 ]]; then
  progress "Configuring PHP settings"
  PHP_VERSION="$(php -r 'echo PHP_MAJOR_VERSION.".".PHP_MINOR_VERSION;' 2>/dev/null || echo "8.3")"
  PHP_OVERRIDE_INI="/etc/php/${PHP_VERSION}/fpm/conf.d/30-wordpress-overrides.ini"

  if [[ -d "/etc/php/${PHP_VERSION}/fpm" ]]; then
    cat > "${PHP_OVERRIDE_INI}" <<EOF
upload_max_filesize=200M
post_max_size=200M
memory_limit=200M
max_execution_time=300
EOF
    systemctl restart "php${PHP_VERSION}-fpm" 2>/dev/null || true
    log_ok "PHP settings updated (upload_max_filesize=200M, memory_limit=200M, max_execution_time=300)"
  else
    log_warn "PHP-FPM directory not found, PHP settings may not be applied"
  fi
fi

### WordPress Language (always set to English, except when only reinstalling plugin)
if [[ "${REINSTALL_PLUGIN}" -eq 0 ]] || [[ "${CHANGE_THEME}" -eq 1 ]]; then
  progress "Setting WordPress language to English"
  # Устанавливаем английский язык, если его нет
  wpcli language core install en_US 2>/dev/null || true
  # Активируем английский язык
  wpcli site switch-language en_US 2>/dev/null || true
  # Устанавливаем WPLANG в пустую строку (английский по умолчанию)
  wpcli option update WPLANG '' 2>/dev/null || true
  log_ok "WordPress language set to English (en_US)"
fi

# Выполняем настройки только если это не режим переустановки плагина
if [[ "${CHANGE_THEME}" -eq 0 ]] && [[ "${REINSTALL_PLUGIN}" -eq 0 ]]; then
  ### Options
  progress "Configuring site options"
  wpcli option update blogname 'MegaBrainCrew'
  wpcli option update tagline 'MBC project dummy website'
  wpcli option update admin_email 'inbox@megabraincrew.com'
  log_ok "Options updated"

  ### Comments settings
  progress "Configuring comments settings"
  # Отключить оповещения блогов (pingbacks/trackbacks)
  wpcli option update default_pingback_flag 0
  wpcli option update default_ping_status 'closed'
  # Отключить комментарии для новых записей
  wpcli option update default_comment_status 'closed'
  # Требовать регистрацию для комментирования
  wpcli option update comment_registration 1
  # Закрыть комментарии для всех постов
  wpcli option update close_comments_for_old_posts 1
  wpcli option update close_comments_days_old 0
  log_ok "Comments disabled"

  ### WordPress Cron
  progress "Configuring WordPress cron"
  # Убедиться, что DISABLE_WP_CRON не установлен в true
  if grep -q "define.*DISABLE_WP_CRON.*true" "${WP_PATH}/wp-config.php" 2>/dev/null; then
    # Заменить на false
    sed -i "s/define.*DISABLE_WP_CRON.*true/define('DISABLE_WP_CRON', false);/" "${WP_PATH}/wp-config.php"
    log_ok "DISABLE_WP_CRON set to false"
  elif ! grep -q "DISABLE_WP_CRON" "${WP_PATH}/wp-config.php" 2>/dev/null; then
    # Добавить определение, если его нет
    sed -i "/\/\* That's all, stop editing! Happy publishing. \*\//i define('DISABLE_WP_CRON', false);" "${WP_PATH}/wp-config.php" 2>/dev/null || true
    log_ok "DISABLE_WP_CRON added (false)"
  fi

  # Добавить запись в crontab для запуска WordPress cron каждую минуту
  WP_CLI_PATH="$(command -v wp)"
  CRON_CMD="cd ${WP_PATH} && ${WP_CLI_PATH} cron event run --due-now --allow-root >/dev/null 2>&1"
  CRON_ENTRY="* * * * * ${CRON_CMD}"

  # Проверить, есть ли уже запись для этого конкретного пути WordPress
  if crontab -l 2>/dev/null | grep -q "${WP_PATH}.*cron.*event.*run"; then
    log_ok "WordPress cron entry already exists in crontab for ${WP_PATH}"
  else
    # Сохранить текущий crontab во временный файл и добавить новую запись
    CRONTAB_TMP="${TMP_DIR}/crontab_${DOMAIN_SAFE}.tmp"
    crontab -l 2>/dev/null > "${CRONTAB_TMP}" || true
    echo "${CRON_ENTRY}" >> "${CRONTAB_TMP}"
    crontab "${CRONTAB_TMP}"
    rm -f "${CRONTAB_TMP}"
    log_ok "WordPress cron added to crontab for ${WP_PATH} (runs every minute)"
  fi
  log_ok "WordPress cron configured"

  ### robots.txt
  progress "Setting robots.txt"
  download "${DATA_BASE}/components/robots.txt" "${TMP_DIR}/robots.txt"
  echo "Sitemap: https://${DOMAIN}/sitemap_index.xml" >> "${TMP_DIR}/robots.txt"
  rm -f "${WP_PATH}/robots.txt"
  mv "${TMP_DIR}/robots.txt" "${WP_PATH}/robots.txt"
  log_ok "robots.txt updated"

  ### Plugins
  progress "Installing & activating plugins"
  wpcli plugin install wordpress-seo w3-total-cache ga-google-analytics disable-comments automatically-hierarchic-categories-in-menu contact-form-7 --activate 2>/dev/null || true
  log_ok "Base plugins installed"

  progress "Installing custom plugin hidetagline"
  download "${DATA_BASE}/plugins/hidetagline.php" "${WP_PATH}/wp-content/plugins/hidetagline.php"
  wpcli plugin activate hidetagline 2>/dev/null || true
  log_ok "hidetagline activated"

  progress "Installing custom plugin mbc-populate"
  if [[ "${REINSTALL_PLUGIN}" -eq 1 ]]; then
    # Удаляем старую версию плагина перед переустановкой
    wpcli plugin deactivate mbc-populate 2>/dev/null || true
    rm -rf "${WP_PATH}/wp-content/plugins/mbc-populate" 2>/dev/null || true
    log_ok "Old mbc-populate plugin removed"
  fi
  PLUGIN_ZIP="${TMP_DIR}/mbc-populate.zip"
  download "${DATA_BASE}/plugins/mbc-populate.zip" "${PLUGIN_ZIP}"
  unzip -oq "${PLUGIN_ZIP}" -d "${WP_PATH}/wp-content/plugins/" 2>/dev/null || true
  wpcli plugin activate mbc-populate 2>/dev/null || true
  if [[ "${REINSTALL_PLUGIN}" -eq 1 ]]; then
    log_ok "mbc-populate reinstalled and activated"
  else
    log_ok "mbc-populate activated"
  fi

  progress "Removing default plugins"
  rm -rf "${WP_PATH}/wp-content/plugins/akismet" || true
  rm -f  "${WP_PATH}/wp-content/plugins/hello.php" || true
  log_ok "Default plugins removed"

  ### Permalinks
  progress "Setting permalinks"
  wpcli rewrite structure '/%category%/%postname%/' 2>/dev/null || true
  wpcli rewrite flush 2>/dev/null || true
  log_ok "Permalinks configured"

  ### Clean content
  progress "Deleting default pages/posts"
  PAGE_IDS="$(wpcli post list --post_type='page' --format=ids || true)"
  POST_IDS="$(wpcli post list --post_type='post' --format=ids || true)"
  if [[ -n "${PAGE_IDS}" ]]; then wpcli post delete ${PAGE_IDS} --force; fi
  if [[ -n "${POST_IDS}" ]]; then wpcli post delete ${POST_IDS} --force; fi
  log_ok "Default content cleared"

  ### Logo
  progress "Importing and setting site logo"
  LOGO_ID="$(wpcli media import "${DATA_BASE}/components/logo.png" --porcelain 2>/dev/null || wpcli media list --field=ID --name=logo.png --format=ids | head -n1 || true)"
  if [[ -n "${LOGO_ID}" ]]; then
    wpcli option update site_logo "${LOGO_ID}" 2>/dev/null || true
    log_ok "Logo set (attachment id: ${LOGO_ID})"
  else
    log_warn "Logo not found or could not be imported"
  fi

  ### Import
  progress "Importing default XML data"
  wpcli plugin install wordpress-importer --activate 2>/dev/null || true
  
  # Проверяем, были ли уже импортированы контактные формы
  CONTACT_FORMS_COUNT="$(wpcli post list --post_type='wpcf7_contact_form' --format=count 2>/dev/null || echo "0")"
  if [[ "${CONTACT_FORMS_COUNT}" -eq "0" ]]; then
    download "${DATA_BASE}/components/import/contact-forms.xml" "${TMP_DIR}/contact-forms.xml"
    wpcli import "${TMP_DIR}/contact-forms.xml" --authors=skip 2>/dev/null || log_warn "Failed to import contact forms"
  else
    log_ok "Contact forms already imported (${CONTACT_FORMS_COUNT} found), skipping"
  fi
  
  # Проверяем, были ли уже импортированы страницы (About us и другие)
  PAGES_COUNT="$(wpcli post list --post_type='page' --format=count 2>/dev/null || echo "0")"
  if [[ "${PAGES_COUNT}" -eq "0" ]]; then
    download "${DATA_BASE}/components/import/pages.xml" "${TMP_DIR}/pages.xml"
    wpcli import "${TMP_DIR}/pages.xml" --authors=skip 2>/dev/null || log_warn "Failed to import pages"
  else
    log_ok "Pages already imported (${PAGES_COUNT} found), skipping"
  fi
  log_ok "XML import completed"
fi

### Themes
# Устанавливаем тему только если:
# 1. Это первичная установка (WordPress не установлен)
# 2. Или используется флаг --change-template
# 3. И не используется только --reinstall-mbc-populate
if [[ "${REINSTALL_PLUGIN}" -eq 0 ]]; then
  if [[ "${CHANGE_THEME}" -eq 1 ]]; then
    # Режим смены темы - всегда устанавливаем
    install_and_configure_theme "${THEME_TYPE}"
  elif ! wpcli core is-installed >/dev/null 2>&1; then
    # Первичная установка - устанавливаем тему
    install_and_configure_theme "${THEME_TYPE}"
  else
    # Сайт уже установлен, но нет флага --change-template - не меняем тему
    log_ok "WordPress already installed, theme not changed (use --change-template to change theme)"
  fi
fi

### Reinstall mbc-populate plugin (if --reinstall-mbc-populate is used)
if [[ "${REINSTALL_PLUGIN}" -eq 1 ]] && [[ "${CHANGE_THEME}" -eq 0 ]]; then
  progress "Removing old mbc-populate plugin"
  
  # Деактивируем плагин
  wpcli plugin deactivate mbc-populate 2>/dev/null || true
  
  # Удаляем плагин через wp-cli (более надежно)
  if wpcli plugin is-installed mbc-populate 2>/dev/null; then
    wpcli plugin delete mbc-populate 2>/dev/null || {
      log_warn "wp-cli delete failed, trying manual removal"
      rm -rf "${WP_PATH}/wp-content/plugins/mbc-populate" 2>/dev/null || true
    }
  fi
  
  # Дополнительно удаляем папку плагина на случай если wp-cli не сработал
  if [[ -d "${WP_PATH}/wp-content/plugins/mbc-populate" ]]; then
    rm -rf "${WP_PATH}/wp-content/plugins/mbc-populate" 2>/dev/null || true
    # Проверяем что папка действительно удалена
    if [[ -d "${WP_PATH}/wp-content/plugins/mbc-populate" ]]; then
      log_err "Failed to remove plugin directory. Check permissions: ls -la ${WP_PATH}/wp-content/plugins/ | grep mbc-populate"
      exit 1
    fi
  fi
  log_ok "Old mbc-populate plugin removed"
  
  # Скачиваем заново (удаляем старый zip если есть)
  PLUGIN_ZIP="${TMP_DIR}/mbc-populate.zip"
  rm -f "${PLUGIN_ZIP}" 2>/dev/null || true
  progress "Downloading mbc-populate plugin"
  download "${DATA_BASE}/plugins/mbc-populate.zip" "${PLUGIN_ZIP}"
  
  # Проверяем что файл скачался
  if [[ ! -f "${PLUGIN_ZIP}" ]]; then
    log_err "Failed to download plugin from server"
    exit 1
  fi
  log_ok "Plugin downloaded from server"
  
  # Распаковываем заново (используем -o для перезаписи)
  progress "Installing mbc-populate plugin"
  unzip -o "${PLUGIN_ZIP}" -d "${WP_PATH}/wp-content/plugins/" >/dev/null 2>&1 || {
    log_err "Failed to extract plugin"
    exit 1
  }
  
  # Проверяем что плагин установлен
  if [[ ! -d "${WP_PATH}/wp-content/plugins/mbc-populate" ]]; then
    log_err "Plugin installation failed - directory not found"
    exit 1
  fi
  log_ok "Plugin installed"
  
  # Активируем
  if ! wpcli plugin activate mbc-populate 2>/dev/null; then
    log_err "Failed to activate plugin"
    exit 1
  fi
  log_ok "mbc-populate reinstalled and activated"
  
  # При использовании только --reinstall-mbc-populate завершаем скрипт здесь
  log_ok "Plugin reinstall completed. Site: https://${DOMAIN}"
  exit 0
fi

### Menu
progress "Creating menu"
wpcli menu create "Main" >/dev/null 2>&1 || true

# Проверяем, есть ли уже пункт "About us" в меню
ABOUT_US_EXISTS="$(wpcli menu item list main --url=/about-us --format=count 2>/dev/null || echo "0")"
if [[ "${ABOUT_US_EXISTS}" -eq "0" ]]; then
  wpcli menu item add-custom main 'About us' /about-us --porcelain >/dev/null 2>&1 || true
  log_ok "Menu item 'About us' added"
else
  log_ok "Menu item 'About us' already exists, skipping"
fi

# Попробовать назначить меню на доступную локацию
MENU_LOCATIONS=("primary" "main" "header" "top" "main-menu")
MENU_ASSIGNED=0
for loc in "${MENU_LOCATIONS[@]}"; do
  if wpcli menu location assign "Main" "${loc}" 2>/dev/null; then
    log_ok "Menu assigned to location: ${loc}"
    MENU_ASSIGNED=1
    break
  fi
done

if [[ "${MENU_ASSIGNED}" -eq 0 ]]; then
  log_warn "Menu created but no suitable location found (tried: ${MENU_LOCATIONS[*]})"
fi
log_ok "Menu configured"

### Availability check
progress "Final site availability check"
http_check "https://${DOMAIN}/" 10 30 || true

if [[ "${CHANGE_THEME}" -eq 1 ]]; then
  log_ok "Theme changed successfully. Site: https://${DOMAIN}"
else
  log_ok "Done. Site: https://${DOMAIN}"
fi

### =========================
### Fix permissions (final)
### =========================
progress "Fixing WordPress permissions"

WEB_USER="${WEB_USER:-www-data}"
WEB_GROUP="${WEB_GROUP:-www-data}"

# Owner/group
chown -R "${WEB_USER}:${WEB_GROUP}" "${WP_PATH}"

# Default perms: dirs 755, files 644
find "${WP_PATH}" -type d -exec chmod 755 {} \;
find "${WP_PATH}" -type f -exec chmod 644 {} \;

# Harden wp-config.php a bit
if [[ -f "${WP_PATH}/wp-config.php" ]]; then
  chmod 640 "${WP_PATH}/wp-config.php"
fi

# Ensure wp-content is not left group-writable
if [[ -d "${WP_PATH}/wp-content" ]]; then
  chmod 755 "${WP_PATH}/wp-content"
fi

log_ok "Permissions fixed: owner=${WEB_USER}:${WEB_GROUP}, dirs=755, files=644, wp-config=640"