#!/usr/bin/env bash
# TODO - make equivalent to https://gitlab.com/megabyte-labs/gas-station/-/blob/master/roles/system/common/tasks/linux/swap.yml

{{ includeTemplate "universal/profile-before" }}
{{ includeTemplate "universal/logg-before" }}

if [ ! -f /swapfile ]; then
  ### Determine ideal size of /swapfile
  MEMORY_IN_KB="$(grep MemTotal /proc/meminfo | sed 's/.* \(.*\) kB/\1/')"
  MEMORY_IN_GB="$((MEMORY_IN_KB / 1024 / 1024))"
  if [ "$MEMORY_IN_GB" -gt 64 ]; then
    SWAP_SPACE="$((MEMORY_IN_GB / 10))"
  elif [ "$MEMORY_IN_GB" -gt 32 ]; then
    SWAP_SPACE="$((MEMORY_IN_GB / 8))"
  elif [ "$MEMORY_IN_GB" -gt 8 ]; then
    SWAP_SPACE="$((MEMORY_IN_GB / 4))"
  else
    SWAP_SPACE="$MEMORY_IN_GB"
  fi
  
  ### Create /swapfile
  FS_TYPE="$(df -Th | grep ' /$' | sed 's/[^ ]*\s*\([^ ]*\).*/\1/')"
  if [ "$FS_TYPE" == 'btrfs' ]; then
    logg info 'Creating BTRFS /swapfile'
    sudo btrfs filesystem mkswapfile /swapfile
  elif [ "$FS_TYPE" == 'zfs' ]; then
    logg warn 'ZFS system detected - add logic here to add /swapfile'
  else
    logg info "Creating a $SWAP_SPACE GB /swapfile"
    sudo fallocate -l "${SWAP_SPACE}G" /swapfile
    sudo chmod 600 /swapfile
    sudo mkswap /swapfile
  fi

  ### Enable the /swapfile
  if [ -f /swapfile ]; then
    logg info 'Running `sudo swapon /swapfile`'
    sudo swapon /swapfile
    if cat /etc/fstab | grep "/swapfile"; then
      sudo sed -i '/\/swapfile/\/swapfile none swap defaults 0 0/' /etc/fstab
    else
      echo "/swapfile none swap defaults 0 0" | sudo tee -a /etc/fstab > /dev/null
    fi
  fi
fi
