#!/bin/bash
set -e

SWAPFILE="/swapfile"

# ============================
# Проверка прав root
# ============================
if [[ $EUID -ne 0 ]]; then
  echo "❌ Запустите скрипт от root"
  exit 1
fi

echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "🧠 НАСТРОЙКА SWAP-ФАЙЛА"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"

# ============================
# Ввод размера swap (в МБ)
# Чтение строго из TTY
# ============================
read -p "Введите размер swap в МБ (например 2048): " SWAP_MB </dev/tty

echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"

# ============================
# Проверка корректности ввода
# ============================
if ! [[ "$SWAP_MB" =~ ^[0-9]+$ ]]; then
  echo "❌ Ошибка: нужно ввести число"
  exit 1
fi

if [[ "$SWAP_MB" -lt 256 ]]; then
  echo "❌ Минимальный размер swap — 256 МБ"
  exit 1
fi

# ============================
# Проверка существующего swap
# ============================
if swapon --show | grep -q "$SWAPFILE"; then
  echo "⚠️ Найден существующий swap — отключаю..."
  swapoff "$SWAPFILE"
fi

if [[ -f "$SWAPFILE" ]]; then
  rm -f "$SWAPFILE"
fi

# ============================
# Создание swap-файла
# ============================
echo "🛠 Создаю swap-файл (${SWAP_MB} МБ)..."

fallocate -l "${SWAP_MB}M" "$SWAPFILE"
chmod 600 "$SWAPFILE"
mkswap "$SWAPFILE" >/dev/null
swapon "$SWAPFILE"

# ============================
# Добавление в fstab
# ============================
if ! grep -q "^$SWAPFILE" /etc/fstab; then
  echo "$SWAPFILE none swap sw 0 0" >> /etc/fstab
fi

# ============================
# Итоговая информация
# ============================
SWAP_GB=$(awk "BEGIN {printf \"%.1f\", $SWAP_MB/1024}")

echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "✅ Swap успешно настроен"
echo "📦 Размер: ${SWAP_GB} ГБ"
echo "📄 Файл: $SWAPFILE"
echo "🔁 Автозапуск: включён"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo
echo "📊 Текущий swap:"
swapon --show
