#!/usr/bin/env bash
set -euo pipefail

# ==============================
# L2 Server RAR unpacker
# Всегда приводит структуру к:
# /srv/l2server/authserver
# /srv/l2server/gameserver
# ==============================

DEST="/srv/l2server"
OWNER="devops:devops"

RAR="${1:-}"

log()  { echo "[+] $*"; }
err()  { echo "[!] $*" >&2; }
die()  { echo "[x] $*" >&2; exit 1; }

command -v unrar >/dev/null 2>&1 || die "unrar не установлен (apt install unrar)"

# ---- поиск архива, если не передан ----
if [[ -z "$RAR" ]]; then
  log "Путь к архиву не указан — ищу *.rar (глубина 6)"
  RAR="$(find / -maxdepth 6 -type f -iname '*.rar' 2>/dev/null | head -n 1)"
  [[ -n "$RAR" ]] || die "RAR архив не найден"
fi

[[ -f "$RAR" ]] || die "Архив не найден: $RAR"

log "Архив: $RAR"

# ---- временная папка ----
TMP="$(mktemp -d -p /tmp l2_unpack_XXXXXX)"
trap 'rm -rf "$TMP"' EXIT

log "Распаковка во временную папку: $TMP"
unrar x -o+ "$RAR" "$TMP" >/dev/null

# ---- ищем корень, где есть authserver + gameserver ----
ROOT=""
while IFS= read -r d; do
  if [[ -d "$d/authserver" && -d "$d/gameserver" ]]; then
    ROOT="$d"
    break
  fi
done < <(find "$TMP" -type d -maxdepth 8)

[[ -n "$ROOT" ]] || die "Не найден корень с authserver/gameserver внутри архива"

log "Найден корень архива: $ROOT"

# ---- бэкап старых директорий ----
STAMP="$(date +%Y%m%d_%H%M%S)"
if [[ -d "$DEST/authserver" || -d "$DEST/gameserver" ]]; then
  BK="$DEST/_backup_unpack_$STAMP"
  log "Существующие каталоги найдены — бэкап в $BK"
  sudo mkdir -p "$BK"
  [[ -d "$DEST/authserver" ]] && sudo mv "$DEST/authserver" "$BK/"
  [[ -d "$DEST/gameserver" ]] && sudo mv "$DEST/gameserver" "$BK/"
fi

# ---- перенос ----
log "Перенос authserver и gameserver в $DEST"
sudo mv "$ROOT/authserver" "$DEST/"
sudo mv "$ROOT/gameserver" "$DEST/"

# ---- права ----
log "Выставляем владельца и права"
sudo mkdir -p "$DEST/authserver/log" "$DEST/gameserver/log"
sudo chown -R $OWNER "$DEST/authserver" "$DEST/gameserver"
sudo find "$DEST/authserver" -type f -name "*.sh" -exec chmod +x {} \;
sudo find "$DEST/gameserver" -type f -name "*.sh" -exec chmod +x {} \;

# ---- контроль ----
log "Контроль:"
[[ -f "$DEST/authserver/AuthServer_loop.sh" ]] && echo "  AuthServer_loop.sh OK" || echo "  AuthServer_loop.sh NOT FOUND"
[[ -f "$DEST/gameserver/GameServer_loop.sh" ]] && echo "  GameServer_loop.sh OK" || echo "  GameServer_loop.sh NOT FOUND"
[[ -f "$DEST/gameserver/config/server.properties" ]] && echo "  server.properties OK" || echo "  server.properties NOT FOUND"

log "Готово. Структура приведена к /srv/l2server/{authserver,gameserver}"
